本文主要介绍sklearn preprocessing四个数据预处理的函数,大概分两类,一是标准化,二是将将数据特征缩放至某一范围。
这四个函数都在sklearn preprocessing模块中,无论哪个方法,都是对列进行的操作。
标准化适用的情况:如果有些特征的方差过大,则会主导目标函数从而使参数估计器无法正确地去学习其他特征,这个时候需要数据标准化,分两步,一是去均值的中心化(均值变为0),二是方差的规模化(方差变为1)。通过这一步,可将特征值等级化,进而实现数据中心化。
原理:
z-score标准化
(zero-mean normalization)原理:均值为0,标准差为1(符合标准正态分布) –> mean=0, std=1
转换函数:
示例数据如下:
#scale方法的使用 #方法一 from sklearn import preprocessing scale_data = preprocessing.scale(X) #方法二 from sklearn.preprocessing import scale scale_data = scale(X) scale_data
#显示每列的均值和方差 scale_data.mean(axis=0) scale_data.std(axis=0)
#StandardScaler()方法 from sklearn import preprocessing stand_means = preprocessing.StandardScaler() X_trans = stand_means.fit_transform(X) Y_trans = stand_means.transform(Y) print("X_trans如下:") X_trans print('-'*60) print("Y_trans如下:") Y_trans
缩放适用的情况:数据集的标准差非常非常小,有时数据中有很多很多零(稀疏数据)需要保存住0元素,这样处理可对方差非常小的属性增强其稳定性,也可维持稀疏矩阵中为0的条目,一般情况下是缩放到在[0,1]之间,或者是特征中绝对值最大的那个数为1,其他数以此维标准分布在[[-1,1]之间。
以上两者分别可以通过MinMaxScaler 或者 MaxAbsScaler方法来实现,实现方法同StandardScaler()方法一样
MinMaxScaler()原理:
转换函数:
MaxAbsScaler()
原理与上面的很像,只是数据会被规模化到[-1,1]之间。也就是特征中,所有数据都会除以最大值。这个方法对那些已经中心化均值维0或者稀疏的数据有意义。