机器学习的数据处理中,常见归一化、标准化与正则化的说法。它们都是什么意思呢?
一、归一化
归一化是把数据处理到一个范围内。机器学习中的数据,可能差别非常大,比如人的年龄与年收入,就不是一个数量级的数字;另外,除数字外,还有很多其他类型的数据。这些数据直接进行机器学习,效果会非常不好,这就需要归一化处理了。归一化处理后,就消除了这种不同数据类型,不同数据范围的差别了,方便数据比较和共同处理,还可以加快机器学习的速度。
常见的归一化处理有0均值标准化,最大最小标准化。
1)0均值标准化的公式是:归一值 = (原值 - 均值)/方差
sklearn里的实现是:sklearn.preprocessing.scale(),将数据按其属性(按列进行)减去其均值,然后除以方差。最后得到的结果是,对每个属性/每列来说所有数据都聚集在0附近,方差值为1。
2)最大最小标准化的公式是:归一值 = (原值 - 最小值)/(最大值 - 最小值)
sklearn里的实现是:sklearn.preprocessing.MinMaxScaler()
这里,我把归一化和标准化放在一起了,两者的差别不大。
二、正则化
用一组与原不适定问题相“邻近”的适定问题的解,去逼近原问题的解,这种方法称为正则化方法。正则化可以提高模型的泛化能力,目的是解决数据不够多,或者训练过度导致的过拟合的问题。
常用的正则化方法有:L1正则化,L2正则化,人为扩充数据等
sklearn里的实现是:sklearn.preprocessing.normalize()
三、什么机器学习的方法需要归一化、正则化处理
最常用的判断标准是多做几遍,一遍用归一化,一遍不用,看看结果。 :-D :-D
通常在机器学习的方法中,需要用到具体数据的,需要归一化;只在乎概率的,不用归一化。
在(https://cloud.tencent.com/developer/article/1092952)里,有个概括。
需要归一化的模型有
- 神经网络,标准差归一化
- 支持向量机,标准差归一化
- 线性回归,可以用梯度下降法求解,需要标准差归一化
- PCA
- LDA
- 聚类算法基本都需要
- K近邻,线性归一化,归一到[0,1]区间内。
- 逻辑回归
不需要归一化的模型:
- 决策树: 每次筛选都只考虑一个变量,不考虑变量之间的相关性,所以不需要归一化。
- 随机森林:不需要归一化,mtry为变量个数的均方根。
- 朴素贝叶斯
需要正则化的模型:
- Lasso
- 岭回归
- Elastic Net