数据无量纲化 学习(1):三种常用数据缩放方法的对比:StandardScaler、MinMaxScaler、RobustScaler

一、数据无量纲化

将不同规格的数据转换到同一规格,或将不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”。

  • 在以梯度和矩阵为核心的算法中,譬如逻辑回归,支持向量机,神经网络,无量纲化可以加快求解速度;
  • 在距离类模型,譬如K近邻,KMeans聚类中,无量纲化可以帮我们提升模型精度,避免某一个取值范围特别大的特征对距离计算造成影响。
  • 一个特例是决策树和树的集成算法们,对决策树、不需要无量纲化,决策树可以把任意数据都处理得很好。

数据的无量纲化可以是线性的,也可以是非线性的。线性的无量纲化包括中心化(Zero-centered或者Mean-subtraction)处理和缩放处理(Scale)。

  • 中心化的本质是让所有记录减去一个固定值,即让数据样本数据平移到某个位置。
  • 缩放的本质是通过除以一个固定值,将数据固定在某个范围之中,取对数也算是一种缩放处理。

二、数据标准化 / 归一化的作用

  • 提升模型精度:标准化 / 归一化使不同维度的特征在数值上更具比较性,提高分类器的准确性。
  • 提升收敛速度:对于线性模型,数据归一化使梯度下降过程更加平缓,更易正确的收敛到最优解。
  • 对于StandardScaler和MinMaxScaler来说,空值NaN会被当做是缺失值,在fit的时候忽略,在transform的时候保持缺失NaN的状态显示。

三、标准差标准化 StandardScaler

该方法是非线性无量纲化,使用均值与方差,对服从正态分布的数据处理,得到符合标准正态分布的数据。
即:当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从均值为0,方差为1的正态分布(即标准正态分布)。

from sklearn.preprocessing import StandardScaler
  • 处理方法:标准化数据减去均值,然后除以标准差,经过处理后数据符合标准正态分布,即均值为0,标准差为1;
  • 转化函数:x = (x-mean) / std;
  • 适用性:适用于本身服从正态分布的数据;
  • Outlier 的影响:基本可用于有outlier的情况,但在计算方差和均值时outliers仍然会影响计算。

(1)参数包括:with_mean, with_std, copy

  • with_mean参数:布尔型,默认为 True,表示在缩放前将数据居中,当尝试在稀疏矩阵上时,这不起作用(并且会引发异常),因为将它们居中需要构建一个密集矩阵,在常见的用例中,该矩阵可能太大而无法容纳在内存中;
  • with_std参数:布尔型,默认为True,表示将数据换算成单位方差(或等效的单位标准差);
  • copy参数 : 布尔值,默认为True,可选参数,表示拷贝一份数据以避免在原数据上进行操作,若设置为 False执行插入行规范化并避免复制。

(2)属性包括:mean_, scale_, var_, n_samples_seen_

  • mean_:训练集中每个特征的平均值,当_mean=False时,为None; scale_:每个特征数据的相对缩放;
  • var_:训练集中每个特征的方差,用于计算比例,当_ std =False时,为None;
  • n_samples_seen_:每个特征处理的样本数。如没有丢失的样本,n_samples_seen_是一个整数,否则是一个数组,并将被重置或递增。

四、极差标准化 / 归一化 MinMaxScaler

该方法是线性无量纲化,区间缩放,基于最大最小值,将数据转换到0,1区间上。

from sklearn.preprocessing import MinMaxScaler
  • 处理方法:将特征缩放到给定的最小值和最大值之间,也可以将每个特征的最大绝对值转换至单位大小。这种方法是对原始数据的线性变换,将数据归一到[0,1]中间;
  • 转换函数:x = (x-min) / (max-min);
  • 适用性:适用于分布范围较稳定的数据,当新数据的加入导致max/min变化,则需重新定义;
  • Outlier 的影响:因为outlier会影响最大值或最小值,因此对outlier非常敏感。

(1)参数包括:min, max, copy

  • min:默认为0,指定区间的下限;
  • max:默认为1,指定区间的上限;
  • copy : 布尔值,默认为True,可选参数,表示拷贝一份数据以避免在原数据上进行操作,若设置为 False执行插入行规范化并避免复制。

(2)属性包括:min_, scale_, data_min_, data_max_

  • min_:每个功能调整为最小;
  • scale_:每个特征数据的相对缩放;
  • data_min_:每个特征在数据中出现的最小值;
  • data_max_:每个特征在数据中心出现的最大值。

五、稳健标准化 RobustScaler

该方法是线性无量纲化,使用具有鲁棒性的统计量缩放带有异常值(离群值)的数据。


from sklearn.preprocessing import RobustScaler
  • 处理方法:该缩放器删除中位数,并根据百分位数范围(默认值为IQR:四分位间距)缩放数据;
  • IQR:是第1个四分位数(25%)和第3个四分位数(75%)之间的范围;
  • 适用性:适用于包含许多异常值的数据;
  • Outlier 的影响:RobustScaler 利用IQR进行缩放来弱化 outlier 的影响。

(1)参数包括:with_centering, with_scaling, quantile_range, copy

  • with_centering:布尔值,默认为
    True,表示在缩放之前将数据居中。若使用稀疏矩阵时,这将导致转换引发异常,因为将它们居中需要建立一个密集的矩阵,在通常的使用情况下,该矩阵可能太大而无法容纳在内存中;
  • with_scaling : 布尔值,默认为True,表示将数据缩放到四分位数范围;
  • quantile_range : 元组,默认值为(25.0, 75.0)即 IQR,表示用于计算 scale_的分位数范围;
  • copy : 布尔值,默认为True,可选参数,表示拷贝一份数据以避免在原数据上进行操作,若设置为 False执行插入行规范化并避免复制。

(2)属性包括:center_, scale_

  • center_ :训练集中每个属性的中位数;
  • scale_ :训练集中每个属性的四分位间距。

六、StandardScaler和MinMaxScaler选哪个?

  1. 大多数机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值非常敏感。
  2. 在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中,StandardScaler往往是最好的选择。
  3. MinMaxScaler在不涉及距离度量、梯度、协方差计算以及数据需要被压缩到特定区间时使用广泛,比如数字图像处理中量化像素强度时,都会使用MinMaxScaler将数据压缩于[0,1]区中。

七、总结

  1. 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,StandardScaler表现更好(避免不同量纲对方差、协方差计算的影响);
  2. 在不涉及距离度量、协方差、数据不符合正态分布、异常值较少的时候,可使用MinMaxScaler。(eg:图像处理中,将RGB图像转换为灰度图像后将其值限定在 [0, 255] 的范围);
  3. 在带有的离群值较多的数据时,推荐使用RobustScaler。
  4. 在希望压缩数据,却不影响数据的稀疏性时(不影响矩阵中取值为0的个数时),我们会使用MaxAbsScaler;在异常值多,噪声非常大时,我们可能会选用分位数来无量纲化,此时使用RobustScaler。

八、数据缩放常见有以下几种

  • 缩放到均值为0,方差为1(Standardization——StandardScaler())
  • 缩放到0和1之间(Standardization——MinMaxScaler())
  • 缩放到-1和1之间(Standardization——MaxAbsScaler())
  • 缩放到0和1之间,保留原始数据的分布(Normalization——Normalizer())

以上方法均是线性无量纲化。

1就是常说的z-score归一化,2是min-max归一化。

学习参考:
几种常用的数据标准化
三种数据标准化区别

你可能感兴趣的:(特征工程,机器学习,python,算法,特征工程,数据标准化)