数据规范化
数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。 原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。
数据规范化的意义:
- 提高模型精度:规范化可以让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
- 提升收敛速度:数据规范化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。
哪些机器学习算法需要数据规范化
- 需要使用梯度下降和计算距离的模型要做归一化,因为不做归一化会使收敛的路径程z字型下降,导致收敛路径太慢,而且不容易找到最优解,归一化之后加快了梯度下降求最优解的速度,并有可能提高精度。比如说线性回归、逻辑回归、adaboost、xgboost、GBDT、SVM、NeuralNetwork等。需要计算距离的模型需要做归一化,比如说KNN、KMeans等。
- 概率模型、树形结构模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、随机森林。
常见的数据规范化
最大-最小规范化
把数据压缩到指定区间
m
i
n
A
min_A
minA为数据的最小值,
m
a
x
A
max_A
maxA为数据的最大值
n
e
w
_
m
i
n
A
new\_min_A
new_minA为数据的最小值,
n
e
w
_
m
a
x
A
new\_max_A
new_maxA为数据的最大值
当 n e w _ m i n A new\_min_A new_minA和 n e w _ m a x A new\_max_A new_maxA取值为[0, 1]时,即为数据归一化
Z-Score规范化(标准化)
把数据映射到均值为0、标准差为1的分布上
v
′
=
v
−
μ
σ
v'=\frac{v-\mu}{\sigma}
v′=σv−μ
μ \mu μ表示均值, σ \sigma σ表示标准差
归一化和标准化的区别
什么时候用归一化/标准化
归一化
- 对输出范围有要求
- 数据较为稳定,不存在极端值
标准化
- 适用于流式数据(不断地有数据进入,因此最大/小值会改变)
- 数据存在较多噪音和异常值,用标准化可以避免异常值和极端值的影响
数据规范化的实现
from sklearn import preprocessing
from scipy.stats import rankdata
std_x = preprocessing.StandardScaler().fit_transform(df.x)
norm_x = preprocessing.MinMaxScaler().fit_transform(df.x)
参考来源:
机器学习笔记:为什么要对数据进行归一化处理?
归一化和标准化大全 (写的非常全)
机器学习中数据预处理——标准化/归一化方法(scaler)
Sklearn中文文档: 5.3 预处理数据