1. sk.preprocessing 预处理模块
对于连续特征的处理
1.1 无量纲化
使不同规格数据转换成同一规格,包括标准化和区间缩放法
1.1.1 标准化
标准化前提是其特征值服从正态分布。因此将其标准化后转换成标准正态分布。
使用原因:部分机器学习算法求解目标函数时,要求特征的均值为0,方差为1.(如:SVM的RFB内核、线性模型的L1和L2正则化)如果某个特征的方差比其他特征的方差大几个数量级别,如:3000:2等,会造成方差大的特征在算法中占据主导地位,使得机器学习效果不佳。
缺点:当特征明显不遵从高斯正态分布时,标准化出来的效果较差。
还要注意,均值和标准差受离群点的影响很大,所以如果有很多异常值,使用RobustScaler或robust_scaler 的效果更好。
scale和 StandardScaler都能接受 scipy.sparse 作为输入,但参数必须设置: with_mean=False。Or会报错: ValueError ,因为默认的中心化会破坏稀疏性,并且此时内存一般会炸,然后崩溃------>dead。
实际应用中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。
标准化需要计算特征均值和标准差,直接调用sklearn.preprocessing.StandardScaler即可
from sklearn.preprocessing import StandardScaler
#标准化,返回值为标准化后的数据
StandardScaler().fit_transform(iris.data)
1.1.2 区间缩放法
区间缩放法最典型的是最大最小缩放,使用sklearn.preproccessing.MinMaxScaler类对数据进行区间缩放到一固定区间如(0,1)。
使用原因:对于方差非常小的属性可以增强其稳定性。有时数据集的标准差非常非常小,有时数据中有很多很多零(稀疏数据)需要保存住0元素。
维持稀疏矩阵中为0的条目。
缺点:
当数据出现新的最大最小值时,需要重来一遍。
若数值集中且某个数值很大,则规范化后各值接近于0,并且将会相差不大。(如:100、101、102、108、20001)
from sklearn.preprocessing import MinMaxScaler
#区间缩放,返回值为缩放到[0, 1]区间的数据
MinMaxScaler().fit_transform(iris.data)
1.2 归一化(normalize )
无纲量化是对数据的列进行处理,而归一化则是对数据的行进行处理,即转化为“单位向量”。
使用原因:正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用。
使用preproccessing.Normalizer类对数据进行归一化
1 from sklearn.preprocessing import Normalizer
2
3 #归一化,返回值为归一化后的数据
4 Normalizer().fit_transform(iris.data)
比较好的参考详情附链接:https://www.cnblogs.com/jasonfreak/p/5448385.html
https://www.bbsmax.com/A/kvJ3gpaAJg/
⚠️注意:不要看中文翻译的规范化标准化归一化什么的词汇,翻译过来很容易混淆,建议按照sklearn 的英文词汇走