zoukankan      html  css  js  c++  java
  • 特征工程2:归一化与标准化

    归一化与标准化属于特征预处理的范畴
     
    · 特征预处理是什么?
    通过特定的数学统计方法将数据转化为算法要求的数据; 特征预处理在scikit-learn中的模块是:sklearn.preprocessing
    对于不同的数据类型,有不同的处理方式,三种常见的数据类型:
    1. 数值型
    2. 类别型
    3. 时间类型
    · 这里我们先看数值型的预处理:
    标准缩放:有两种常见方式,归一化和标准化
    在特征较多时,并且认为这些特征同等重要,或者算法模型涉及到距离计算时(比如K近邻),为了防止某些特征的值对算法产生的影响过大,需要将特征数据缩放至某一个区间,这样比较起来才有意义,并且可以减少程序的计算量,加快速度。
    举例说明:比如体型特征,数据如下,有身高和体重两个特征,计量单位分别是cm和kg
    如果我们要按体形特征将人群分类,找出王五的体型与谁最接近,并且认为身高和体重对于体型评判同等重要,由于身高和体重单位不同,身高的值较大,对结果的影响可能较大,所以需要将这两个特征缩放到同一个区间,这样每个特征对结果的影响是相同的。
     
    1、 归一化
     
    常用的归一化方法是:极差变换法,也称为min-max方法,通过线性变换将数据映射到[0,1]之间,变换公式是:
     
    X' = frac{x-min}{max-min}
    其中min是样本中最小值,max是样本中最大值,x为每一个特征的值
     
    对应到示例中的数据,计算过程如下:
     
     
    scikit-learn中归一化API是MinMaxScaler
     
    使用方法如下:
    # 归一化处理 
    from sklearn.preprocessing import MinMaxScaler
    m = MinMaxScaler()
    feature_data = [[172,60], [168,68], [165,65]]
    data = m.fit_transform(data)
    print(data)
    输出结果:
    array([[ 1. , 0. ], 
    [ 0.42857143, 1. ],
    [ 0. , 0.625 ]])
    归一化总结:从归一化的公式中,可以看出最大值最小值在计算过程起到的作用很大,因此计算结果特别容易受到异常数据的影响,所以这种方法的稳定性很差,只适用于数据精确的场景,但是现实中数据难免有异常,所以归一化很少被用到,为了避免异常数据对结果的影响,可以使用另一种方法:标准化。
     
    2、 标准化
     
    常用的标准化方法是:z-score,将数据转换到均值为0,标准差为1的范围内,公式如下:
    X' = frac{x-mean}{σ}
    作用于每一列,其中mean为特征的平均值,σ为标准差
     
    σ = sqrt{frac{(x1-mean)^{2}+(x1-mean)^{2}+...}{n(每个特征的样本数)}}
     
    scikit-learn中标准化的API是StandardScaler,使用方法与归一化类似,代码如下:
    # 标准化处理 
    from sklearn.preprocessing import StandardScaler
    m = StandardScaler()
    data = [[172,60], [168,68], [165,65]]
    stand_data = m.fit_transform(data)
    print(stand_data)
    输出结果:
    array([[ 1.27872403, -1.31319831], 
    [-0.11624764, 1.1111678 ],
    [-1.16247639, 0.20203051]])
    标准化总结:标准化的应用场景非常广泛,在具有一定数据量的前提下,少量异常点对于平均值的影响不大,从而对于标准差的影响不大,进而对结果的影响也不大。
     
    3、 归一化与标准化总结
    1. 归一化和标准化本质上都是线性变换,线性变换的性质决定了对数据转换之后不会“失效”,反而还能提高数据的表现,因为线性变化不改变原始数据的数值排序;
     
    2. 归一化的缩放是“拍扁”统一到区间(仅由极值决定),而标准化的缩放更加“弹性”和“动态”,与整体样本的分布有很大关系;
     
    3. 归一化的输出范围在0-1之间,标准化的输出范围是负无穷到正无穷;
     
    4. 当算法涉及到距离运算时,必须先使用归一化或标准化进行标准缩放,由于对于异常数据的反应不同,标准化的使用更广泛。
     
     
     
  • 相关阅读:
    HTTP与HTTPS的区别
    为什么我们越努力 越不安
    最可怕的是牛人还那么努力
    Canvas、Paint、的简单使用及辅助类(Path、Shader、简介)
    创建style和修改style
    Drawable类及XMLDrawable的使用
    反射机制
    Gesture(手势)浅析
    在外部存储器上写入或读取文件(Environment类、File类的使用)
    存储、读取——Android应用程序内置的文件夹
  • 原文地址:https://www.cnblogs.com/chaofan-/p/11044710.html
Copyright © 2011-2022 走看看