数据预处理
让数据适应匹配模型
- 数据类型不同–文字、数字、时间序列
- 数据质量不行–噪声、异常、缺失、数据出错、量纲不一、重复、数据是偏态、数据量太大太小
特征工程
降低计算成本、提升模型上限
- 特征之间的相关性
- 特征和标签无关
- 特征太多太小、无法表现应有数据现象无法展示数据真实面貌
sklearn
- Dimensionality reduction(降维)
- Preprocessing(预处理)
模块preprocessing几乎包含数据预处理所有内容
模块Impute填补缺失值专用
模块feature_selection包含特征选择的各种方法的实践
模块decomposition包含降维算法
数据科学专用特征工程书籍Feature Engineering for Machine Learning
大牛的翻译面向机器学习的特征工程
-
数据无量纲化
把不同规格数据转化到同一规格,把不同分布数据转化到同一分布,比如希望数据都在0-10之间,或者希望数据都符合标准正态分布等,这类需求统称为无量纲化- 梯度和矩阵为核心的算法中,可以加快逻辑回归,支持向量机、神经网络的求解速度
- 距离模型k-means聚类,可以提升模型精度,避免某个取值范围特别大的特征对距离计算造成影响
- 决策树和树的集成算法不用量钢化,因为局册数可以把任意数据处理的很好
数据预处理
1.数据无量钢化
- 线性量钢化
- 非线性量钢化
中心化(Zero -centered/Mean-subtraction) | 让所有记录减去一个固定值,即让数据样本数据平移到某个位置 |
---|---|
缩放处理(Scale) | 通过除以一个固定值,将数据固定在某个范围之中,取对数算是一种 |
-
preprocessing.MinMaxScaler
数据归一化(Normalization)
(数据x-最小值)/极差
归一化的数据服从正态分布 -
注意:数据归一化不是数据正则化(regularization)正则化不是预处理手段
-
归一化是以列进行的
from sklearn.preprocessing import MinMaxScaler
data = [[-1,2],[-0.5,6],[0,10],[1,18]]
#默认将数据归一化到[0,1]之间
scaler=MinMaxScaler()
#将数据归一化到[5,10]之间
#scaler=MinMaxScaler(feature_range=[5,10])
result=scaler.fit(data)#本质是生成min和max
result=scaler.transform(data)#通过接口导出结果
#result=scaler.fit_transform(data)#将上面两步一步到位
result
归一化到[0,1]结果
array([[0. , 0. ],
[0.25, 0.25],
[0.5 , 0.5 ],
[1. , 1. ]])
#反归一化
scaler.inverse_transform(result)
回到归一化前的矩阵
array([[-1. , 2. ],
[-0.5, 6. ],
[ 0. , 10. ],
[ 1. , 18. ]])
- preprocessing.StandardScaler
数据标准化
from sklearn.preprocessing import StandardScaler
data=[[-1,2],[-0.5,6],[0,10],[1,18]]
scaler=StandardScaler()
scaler.fit(data)#fit 本质是生成均值和方差
scaler.mean_#查看均值的属性mean_ 以列为单位
scaler.var_
结果如下:
array([-0.125, 9. ])
array([ 0.546875, 35. ])
x_std=scaler.transform(data)#通过接口导出结果
x_std
结果如下
array([[-1.18321596, -1.18321596],
[-0.50709255, -0.50709255],
[ 0.16903085, 0.16903085],
[ 1.52127766, 1.52127766]])
#左列数据和右列一致是因为两列数据结构一致,归一化结果相同
查看数据的均值和标准差
x_std.mean()
x_std.std()
0.0
1.0