美文网首页
机器学习第三课_数据预处理2

机器学习第三课_数据预处理2

作者: 素心似锦 | 来源:发表于2020-03-14 11:14 被阅读0次

    数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。

    特征工程又包含了Data PreProcessing(数据预处理)、Feature Extraction(特征提取)、Feature Selection(特征选择)和Feature construction(特征构造)等子问题,而数据预处理又包括了数据清洗和特征预处理等子问题。


    1、归一化

    最大最小【0,1】归一化

    MaxAbs归一化

    MAXABS归一化

    某些算法要求样本具有零均值和单位方差;

    需要消除样本不同属性具有不同量级时的影响。

    归一化有可能提高精度; 数量级的差异将导致量级较大的属性占据主导地位,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要);

    数量级的差异将导致迭代收敛速度减慢; 当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;

    依赖于样本距离的算法对于数据的数量级非常敏感。

    数据标准化的原因:fromsklearn.preprocessing import   MaxAbsScaler

    maxAbsScaler=MaxAbsScaler().fit(X_train)

    maxAbsScaler.transform(X_train)

    标准化(也叫Z-score standardization,均值为0方差为1)(对列向量处理)

    标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。

    基于原始数据的均值(mean)和标准差(standarddeviation)进行数据的标准化。将A的原始值x使用z-score标准化到x’。z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。

    from sklearn import preprocessing

    import numpy as np

    # 初始化数据

    x = np.array([[ 0., -3.,  1.],

                  [ 3.,  1.,  2.],

                  [ 0.,  1., -1.]])

    # 将数据进行 Z-Score 规范化

    scaled_x = preprocessing.scale(x)

    print (scaled_x)

    数据标准化的原因:

    某些算法要求样本具有零均值和单位方差;

    需要消除样本不同属性具有不同量级时的影响。

    归一化有可能提高精度; 数量级的差异将导致量级较大的属性占据主导地位,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要);

    数量级的差异将导致迭代收敛速度减慢; 当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;

    依赖于样本距离的算法对于数据的数量级非常敏感。

    相同点:

    它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。

    不同点:

    目的不同,归一化是为了消除纲量压缩到[0,1]区间;

    标准化只是调整特征整体的分布;

    归一化与最大,最小值有关;

    标准化与均值,标准差有关;

    归一化输出在[0,1]之间;

    标准化无限制。

    归一化与标准化的应用场景

    在分类、聚类算法中,需要使用距离来度量相似性的时候(如SVM、KNN)、或者使用PCA技术进行降维的时候,标准化(Z-score standardization)表现更好;

    在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用归一化方法。

    比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围;

    基于树的方法不需要进行特征的归一化。

    例如随机森林,bagging与boosting等方法。

    如果是基于参数的模型或者基于距离的模型,因为需要对参数或者距离进行计算,都需要进行归一化。

    一般来说,建议优先使用标准化。对于输出有要求时再尝试别的方法,如归一化或者更加复杂的方法。很多方法都可以将输出范围调整到[0, 1],如果我们对于数据的分布有假设的话,更加有效的方法是使用相对应的概率密度函数来转换。

    除了上面介绍的方法外,还有一些相对没这么常用的处理方法:RobustScaler、PowerTransformer、QuantileTransformer和QuantileTransformer等。

    正则化

    正则化-Normalizer,将同一行数据的不同特征进行规范化,这样一个数据的不同特征具有相同的量纲

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

    from sklearn.preprocessing import Normalizer

    #归一化,返回值为归一化后的数据

    Normalizer().fit_transform(iris.data)

    array([[0.80377277, 0.55160877, 0.22064351, 0.0315205 ],

          [0.82813287, 0.50702013, 0.23660939, 0.03380134],

          [0.80533308, 0.54831188, 0.2227517 , 0.03426949],

          [0.80003025, 0.53915082, 0.26087943, 0.03478392],

          [0.790965  , 0.5694948 , 0.2214702 , 0.0316386 ],

    #normalizer  = Normalizer(norm='l2').fit(X_train)

    #normalizer.transform(X_train)

    相关文章

      网友评论

          本文标题:机器学习第三课_数据预处理2

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