关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化

前端之家收集整理的这篇文章主要介绍了关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、标准化(Z-score),或者去除均值和方差缩放

公式为:(X-mean)/std 计算时对每个属性/每列分别进行。

将数据按期属性(按列进行)减去其均值,并处以其方差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。

实现时,有两种不同的方式:

  • 使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> from sklearn @H_502_63@ import@H_502_63@ preprocessing@H_502_63@
>>> @H_502_63@ numpy @H_502_63@ as@H_502_63@ np@H_502_63@
>>> X = np.array([[ @H_502_63@ 1@H_502_63@ .,-@H_502_63@ 502_63@ 2@H_502_63@ .],@H_502_63@
... [ @H_502_63@ 0@H_502_63@ 502_63@
.]])@H_502_63@
>>> X_scaled = preprocessing.scale(X)@H_502_63@
>>> X_scaled @H_502_63@
array([[ @H_502_63@ . ...,0)!important; background:none!important">1.22@H_502_63@ ...,0)!important; background:none!important">1.33@H_502_63@ ...],@H_502_63@
@H_502_63@ [ @H_502_63@ 0.26@H_502_63@ 502_63@
[-@H_502_63@ 1.06@H_502_63@ ...]])@H_502_63@
>>>#处理后数据的均值和方差@H_502_63@
>>> X_scaled.mean(axis=@H_502_63@ )@H_502_63@
array([ @H_502_63@ .])@H_502_63@
>>> X_scaled.std(axis=@H_502_63@ )@H_502_63@
.])@H_502_63@
@H_403_171@
  • 使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    >>> scaler @H_502_63@ =@H_502_63@ preprocessing.StandardScaler().fit(X)@H_502_63@
    >>> scaler@H_502_63@
    StandardScaler(copy@H_502_63@ =@H_502_63@ True@H_502_63@ ,with_mean@H_502_63@ 502_63@ )@H_502_63@
    >>> scaler.mean_ @H_502_63@
    array([ @H_502_63@ 1.@H_502_63@ 502_63@ 0.@H_502_63@ 0.33@H_502_63@ ...])@H_502_63@
    >>> scaler.std_ @H_502_63@
    0.81@H_502_63@ 1.24@H_502_63@ ...])@H_502_63@
    >>> scaler.transform(X) @H_502_63@
    array([[ @H_502_63@ 502_63@ -@H_502_63@ 1.22@H_502_63@ 1.33@H_502_63@ 502_63@
    @H_502_63@ [ @H_502_63@ 0.26@H_502_63@ 502_63@
    [@H_502_63@ 1.06@H_502_63@ ...]])@H_502_63@
    >>>@H_502_63@ #可以直接使用训练集对测试集数据进行转换@H_502_63@
    >>> scaler.transform([[@H_502_63@ ]]) @H_502_63@
    array([[@H_502_63@ 2.44@H_502_63@ ...]])@H_502_63@


    二、将属性缩放到一个指定范围

    除了上述介绍的方法之外,另一种常用的方法是将属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现。

    使用这种方法的目的包括

    1、对于方差非常小的属性可以增强其稳定性。

    2、维持稀疏矩阵中为0的条目。

    3
    4
    12
    19
    20
    21
    22
    23
    24
    >>> X_train @H_502_63@ np.array([[ @H_502_63@ 2.@H_502_63@ ],@H_502_63@
    ... [ @H_502_63@ 502_63@
    ]])@H_502_63@
    ...@H_502_63@
    >>> min_max_scaler @H_502_63@ preprocessing.MinMaxScaler()@H_502_63@
    >>> X_train_minmax @H_502_63@ min_max_scaler.fit_transform(X_train)@H_502_63@
    >>> X_train_minmax@H_502_63@
    0.5@H_502_63@ 502_63@
    0.33333333@H_502_63@ 502_63@
    ]])@H_502_63@
    >>> @H_502_63@ #将相同的缩放应用到测试集数据中@H_502_63@
    >>> X_test @H_502_63@ np.array([[ @H_502_63@ 3.@H_502_63@ 4.@H_502_63@ ]])@H_502_63@
    >>> X_test_minmax @H_502_63@ min_max_scaler.transform(X_test)@H_502_63@
    >>> X_test_minmax@H_502_63@
    1.5@H_502_63@ 1.66666667@H_502_63@ ]])@H_502_63@
    #缩放因子等属性@H_502_63@
    >>> min_max_scaler.scale_ @H_502_63@
    ...])@H_502_63@
    >>> min_max_scaler.min_ @H_502_63@
    ...])@H_502_63@

    当然,在构造类对象的时候也可以直接指定最大最小值的范围:feature_range=(min,max),此时应用的公式变为:

    X_std@H_490_502@=(X-X.min(axis=0))/(X.max(axis0)0))

    X_scaled=X_std/(max-min)+min


    三、正则化(Normalization)

    正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用。

    Normalization主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。

    p-范数的计算公式:||X||p=(|x1|^p+|x2|^p+...+|xn|^p)^1/p

    方法主要应用于文本分类和聚类中。例如,对于两个TF-IDF向量的l2-norm进行点积,就可以得到这两个向量的余弦相似性。

    1、可以使用preprocessing.normalize()函数对指定数据进行转换:

    9
    >>> X @H_502_63@ [[ @H_502_63@ ]]@H_502_63@
    >>> X_normalized @H_502_63@ preprocessing.normalize(X,norm@H_502_63@ =@H_502_63@ 'l2'@H_502_63@ )@H_502_63@
    >>> X_normalized @H_502_63@
    0.40@H_502_63@ 502_63@
    0.70@H_502_63@

    2、可以使用processing.Normalizer()类实现对训练集和测试集的拟合和转换:

    12
    >>> normalizer @H_502_63@ preprocessing.Normalizer().fit(X) @H_502_63@ # fit does nothing@H_502_63@
    >>> normalizer@H_502_63@
    Normalizer(copy@H_502_63@ )@H_502_63@
    >>>@H_502_63@
    >>> normalizer.transform(X) @H_502_63@
    ...]])@H_502_63@
    >>> normalizer.transform([[@H_502_63@ ]]) @H_502_63@
    补充:

    原文链接:https://www.f2er.com/regex/358924.html

    猜你在找的正则表达式相关文章