归一化/标准化 定义
- 归一化:就是将训练集中数值特征的值缩放到0和1之间。公式如下
- 标准化:就是将训练集中数值特征的值缩放成均值为0,方差为1的状态。公式如下
需要先计算出均值和标准差,下面是标准差的计算公式
μ表示均值,x*表示标准化的表达式
优点
- 加快了梯度下降求最优解的速度。
例子如下,左图代表没处理过的数据,最优解的求值可能会比较缓慢,例子如下,左图代表没处理过的数据,最优解的求值可能会比较缓慢,而右图是归一化后的,明显收敛速度更快。
- 提升模型精度
例如,在KNN类算法中。我们需要计算每个点与分类点之间的距离,当我们没有进行归一化操作的时候,取值范围大的特征占据主导因素,导致其他特征的影响极小,这样会影响到最后的结果。
什么情况下必须进行标准化/归一化?
- 当你的损失函数,有L1或者L2惩罚项时,必须使用标准化/归一化,因为不用正则时,我们的损失函数只是仅仅在度量预测与真实的差距,加上正则后,我们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小。而参数值的大小程度或者说大小的级别是与特征的数值范围相关的。
- Kmeans,KNN一些涉及到距离有关的算法,或者聚类的话,都是需要先做变量标准化的。
- 调用SVM的RBF内核和PCA算法
怎么进行标准化/归一化?
这里我们引用sklearn中自带的数据,来进行操作
导入数据
from sklearn.datasets import load_iris
iris = load_iris()
iris.data
标准化
from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(iris.data)
归一化
from sklearn.preprocessing import MinMaxScaler
MinMaxScaler().fit_transform(iris.data)
另外,我们要先拆分出test集,不要在整个数据集上做标准化,因为那样会将test集的信息引入到训练集中,这是一个非常容易犯的错误!