机器学习中,在数据预处理过程中,通过将数据归一化可以加快梯度下降求最优解的速度,也有可能提高模型计算的精度。
常用的归一化方法主要有两种:
- 最值归一化。比如把最大值归一化成1,最小值归一化成-1;或把最大值归一化成1,最小值归一化成0。适用于本来就分布在有限范围内的数据。
- 其中常用的方法有
- 线性比例变换法:yi = xi/max(x) 即归一化后结果等于未处理前值除以样本中最大值
- 极差变换法:yi = (xi-min(x))/(max(x)-min(x)) 即归一化后结果等于未处理前值减去最小值之后除以最大值减去最小值的差
- 其中常用的方法有
- 0均值方差归一化(标准化)。一般是把均值归一化成0,方差归一化成1。适用于分布没有明显边界的情况,受outlier影响也较小。
- 使用的方法如下:
- yi = (xi-mean(x))/σ 其中,mean(x)为均值,σ为方差
- 在python中,可以用一下方法:
- import Numpy as np
- mean = np.mean(X, axis=0) # 均值
- v = np.std(X, axis=0) # 方差
- X = (X - mean) / v #得到归一化结果
- 使用的方法如下:
归一化和标准化的区别
- 归一化的缩放是统一到区间(仅由极值决定),输出范围是在0到1(或-1到1)之间的,它的结果很容易受异常值影响(如有一个与其他值相比特别大的值,则会造成很大影响)。
- 标准化的缩放是更加“弹性”和“动态”的,和整体样本的分布(即样本中每个点)有很大的关系,输出范围是负无穷到正无穷。它的结果不太受异常值的影响,相对可以避免异常值和极端值的影响。
对于一些我们常见的模型来说,概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、rf。而像 adaboost、svm、lr、KNN、KMeans 之类的最优化问题就需要归一化。