数据的特征预处理?(归一化)&(标准化)&(缺失值)
特征处理是什么:
通过特定的统计方法(数学方法)将数据转化成为算法要求的数据
sklearn特征处理API:
sklearn.preprocessing
代码示例: 文末!
归一化:
公式:
注意:作用于每一列,max为一列的最大值,min为一列的最小值,那么X''为最终结果,mx、mi分别为指定区间,默认mx为1,mi为0
sklearn归一化API:
sklearn.preprocessing.MinMaxScaler
归一化总结:
注意在特定场景下最大值与最小值是变化的,另外,最大值与最小值非常容易受到异常点的影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景
标准化:
公式:
对于归一化来说,如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
对于标准化来说,如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小
sklearn标准化API:
sklearn.preprocessing.StandardScaler
标准化总结:
在已有样本足够多情况下比较稳定,适合现在嘈杂的大数据
缺失值:
sklearn缺失值API:
sklearn.preprocessing.imputer
代码示例:
1 from sklearn.preprocessing import MinMaxScaler, StandardScaler, Imputer 2 import numpy as np 3 4 5 def mm(): 6 """归一化处理 7 X' = (x-min)/(max-min) 8 X'' = X'*(mx-mi)+mi 9 """ 10 m = MinMaxScaler(feature_range=(5,10)) # 默认范围为0-1 11 array = [[90,2,10,40],[60,4,15,45],[75,3,13,46]] 12 data = m.fit_transform(array) 13 print(data) 14 15 def standard(): 16 """标准化缩放 17 相比于归一化,标准化对于存在异常值而对结果的影响不大,适合大数据 18 而归一化,由于受异常点的影响,所以...... 19 """ 20 s = StandardScaler() 21 array = [[1,-1,3], [2,4,2], [4,6,-1]] 22 data = s.fit_transform(array) 23 print(data) 24 25 def im(): 26 """缺失值处理""" 27 im = Imputer(missing_values='NaN', strategy='mean', axis=0) # nan 或 NaN都可以,固定写法,填补策略(平均值),按列填充 28 data = im.fit_transform([[1,2],[np.nan,3],[7,6]]) 29 print(data) 30 31 32 if __name__ == '__main__': 33 mm() 34 standard() 35 im()