归一化和标准化
一,归一化
处理不同特征之间数据相差不是太大的问题。
特征1 | 特征2 | 特征3 | 特征4 |
80 | 2 | 10 | 30 |
40 | 4 | 15 | 40 |
30 | 3 | 12 | 45 |
以计算80这个位置进行转换为例,特征1这一列 x‘=(80-30)/(80-30)=1 x''=1*(1-0)+0=1 故80转换化为x''=1 其它位置同理。
代码如下:
from sklearn.preprocessing import MinMaxScaler def guiyi(): mm=MinMaxScaler() data=mm.fit_transform([[80,2,10,30],[40,4,15,40],[30,3,12,45]]) print(data) return None if __name__ == '__main__': guiyi()
运行结果如下:
[[1. 0. 0. 0. ] [0.2 1. 1. 0.66666667] [0. 0.5 0.4 1. ]]
也可以规定归一化后特征的范围:
from sklearn.preprocessing import MinMaxScaler def guiyi(): mm=MinMaxScaler(feature_range=(2,3)) data=mm.fit_transform([[80,2,10,30],[40,4,15,40],[30,3,12,45]]) print(data) return None if __name__ == '__main__': guiyi()
结果如下:
[[3. 2. 2. 2. ] [2.2 3. 3. 2.66666667] [2. 2.5 2.4 3. ]]
二,标准化
在样本足够多的情况下比较稳定,适合现代嘈杂大数据场景
同上,继续用上面表格里面的数据进行标准化,代码如下:
from sklearn.preprocessing import StandardScaler def standardScaler(): std=StandardScaler() data=std.fit_transform([[80,2,10,30],[40,4,15,40],[30,3,12,45]]) print(data) return None if __name__ == '__main__': standardScaler()
运行结果如下:
[[ 1.38873015 -1.22474487 -1.13554995 -1.33630621] [-0.46291005 1.22474487 1.29777137 0.26726124] [-0.9258201 0. -0.16222142 1.06904497]]