特征归一化/正则化/非线性归一化
- 线性函数归一化 (Min-Max Scaling)
- 零均值归一化 (Z-Score Normalization)
- 正则化 (l1, l2, max)
- 非线性归一化 (log, exp, tan, …)
[1]: https://www.cnblogs.com/LBSer/p/4440590.html
[2]: https://blog.csdn.net/pipisorry/article/details/52247379
[3]: https://www.tinymind.cn/articles/1217
归一化的优势
提升收敛速度:未归一化优化目标的等值图为椭圆,归一化后优化目标的等值图为圆形,优化时梯度为垂直等值线方向,椭圆以之字形下降
提升模型精度:如果我们选用的距离度量为欧式距离,如果数据预先没有经过归一化,那么那些绝对值大的features在欧式距离计算的时候起了决定性作用。
从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
归一化与梯度下降,谨记梯度垂直等值线
何时使用归一化
梯度下降法求解的模型一般需要归一化。
这里有一个一般的准则,就是需要归一化的模型,说明该模型关心变量的值,而相对于概率模型来说,关心的是变量的分布和变量之间的条件概率。所以大部分概率模型不需要归一化。还有就是如果模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。
逻辑回归必须要进行标准化吗?
这取决于我们的逻辑回归是不是用正则。
如果你不用正则,那么,标准化并不是必须的,如果你用正则,那么标准化是必须的。
为什么呢?
因为不用正则时,我们的损失函数只是仅仅在度量预测与真实的差距,加上正则后,我们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小。而参数值的大小程度或者说大小的级别是与特征的数值范围相关的。举例来说,我们用体重预测身高,体重用kg衡量时,训练出的模型是: 身高 = 体重*x x就是我们训练出来的参数。
当我们的体重用吨来衡量时,x的值就会扩大为原来的1000倍。
在上面两种情况下,都用L1正则的话,显然对模型的训练影响是不同的。
假如不同的特征的数值范围不一样,有的是0到0.1,有的是100到10000,那么,每个特征对应的参数大小级别也会不一样,在L1正则时,我们是简单将参数的绝对值相加,因为它们的大小级别不一样,就会导致L1最后只会对那些级别比较大的参数有作用,那些小的参数都被忽略了。
如果不用正则,那么标准化对逻辑回归有什么好处吗?
进行标准化后,我们得出的参数值的大小可以反应出不同特征对样本label的贡献度,方便我们进行特征筛选。如果不做标准化,是不能这样来筛选特征的。
做标准化有什么注意事项吗?
最大的注意事项就是先拆分出test集,不要在整个数据集上做标准化,因为那样会将test集的信息引入到训练集中,这是一个非常容易犯的错误!
需要归一化的模型有
神经网络,标准差归一化
支持向量机,标准差归一化
线性回归,可以用梯度下降法求解,需要标准差归一化
PCA
LDA
聚类算法基本都需要
K近邻,线性归一化,归一到[0,1]区间内。
逻辑回归
不需要归一化的模型:
决策树: 每次筛选都只考虑一个变量,不考虑变量之间的相关性,所以不需要归一化。 (信息增益)
随机森林:不需要归一化,mtry为变量个数的均方根。 (信息增益)
朴素贝叶斯
使用正则化的模型:
Lasso
Elastic Net