美文网首页scikit learnMachine_Learning
scikit_learn学习笔记八——scikit_learn标

scikit_learn学习笔记八——scikit_learn标

作者: 深思海数_willschang | 来源:发表于2018-08-31 12:40 被阅读100次

    数据标准化(Standardization)与 归一化(Normalization)

    在机器学习领域中,不同评价指标(即特征向量中的不同特征就是所述的不同评价指标)往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。

    一般涉及到梯度下降和距离的计算需要进行标准化或正则化。

    • 数据的标准化(Standardization)是将数据按比例缩放,使之落入一个小的特定区间。因而标准化的数据可正可负。

    • 归一化(Normalization)其实就是标准化的一种方式,只不过归一化是将数据映射到了[0,1]这个区间中。

    归一化的目的就是使得预处理的数据被限定在一定的范围内(比如[0,1]或者[-1,1]),从而消除奇异样本数据导致的不良影响。

    线性归一化(min-max normalization)

    {x}' = \frac{x-min(x)} {max(x) - min(x)}

    从公式中可看出,这种归一化适合数值比较集中的情况,缺陷就是如果max和min不稳定,很容易使得归一化结果不稳定,使得后续的效果不稳定。

    # 使用scikit-learn函数
    min_max_scaler = preprocessing.MinMaxScaler()
    feature_scaled = min_max_scaler.fit_transform(feature)
    # 使用numpy自定义函数
    def min_max_norm(x):
        x = np.array(x)
        x_norm = (x-np.min(x))/(np.max(x)-np.min(x))
        return x_norm
    

    标准差标准化 Z-Score Standardization

    {x}' = \frac{x- \mu }{\delta } , μ为总体平均值,X-μ为离均差,σ表示总体标准偏差

    Z-Score即零-均值标准化, 即先求出全部数据的均值和方差,再进行计算。数据符合标准正态分布,均值为0,标准差为1。

    sklearn.preprocessing.scale(X, axis=0, with_mean=True,with_std=True,copy=True)
    """
    参数解释:
    X:数组或者矩阵
    axis:int类型,初始值为0,axis用来计算均值 means 和标准方差 standard deviations. 如果是0,则单独的标准化每个特征(列),如果是1,则标准化每个观测样本(行)。
    with_mean: boolean类型,默认为True,表示将数据均值规范到0
    with_std: boolean类型,默认为True,表示将数据方差规范到1
    """
    
    StandardScaler.png
    # 使用scikit-learn函数
    standar_scaler = preprocessing.StandardScaler()
    feature_scaled = standar_scaler.fit_transform(feature)
    # 使用numpy自定义函数
    def min_max_norm(x):
        x = np.array(x)
        x_norm = (x-np.mean(x))/np.std(x)
        return x_norm
    

    非线性归一化

    在数据分化较大的场景,有些数值大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括log、指数、反正切等。需要根据数据分布的情况,决定非线性函数的曲线。

    log函数:x = lg(x)/lg(max)

    反正切函数:x = atan(x)*2/pi

    归一化处理的好处

    1. 加快梯度下降的求解速度,即提升模型的收敛速度


      image.png

      如上图所示,两个特征区间相差非常大时,如左图中的x1[0-2000]和x2[1-5],形成的等高线偏椭圆,迭代时很有可能走“之字型”路线(垂直长轴),从而导致需要迭代很多次才能收敛。
      而右图对两个特征进行了归一化,对应的等高线就会变圆,在梯度下降进行求解时能较快的收敛。

    2. 有可能提高模型的精度
      一些分类器需要计算样本之间的距离,如果一个特征的值域范围非常大,那么距离计算就会主要取决于这个特征,有时就会偏离实际情况。

    正则化(Regularization)

    用一组与原不适定问题相“邻近”的适定问题的解,去逼近原问题的解,这种方法称为正则化方法。

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

    image.png

    【总结】
    归一化是为了消除不同数据之间的量纲,方便数据比较和共同处理,比如在神经网络中,归一化可以加快训练网络的收敛性;标准化是为了方便数据的下一步处理,而进行的数据缩放等变换,并不是为了方便与其他数据一同处理或比较,比如数据经过零-均值标准化后,更利于使用标准正态分布的性质,进行处理;正则化而是利用先验知识,在处理过程中引入正则化因子(regulator),增加引导约束的作用,比如在逻辑回归中使用正则化,可有效降低过拟合的现象。

    相关文章

      网友评论

        本文标题:scikit_learn学习笔记八——scikit_learn标

        本文链接:https://www.haomeiwen.com/subject/cfdjwftx.html