机器学习---正则化、过拟合抑制与特征筛选
专栏:机器学习
个人主页:云端筑梦狮
注:上一篇机器学习还差一小节,日后坑必会填上
一.正则化
-
什么是正则化 / 如何进行正则化
其实机器学习中正则化(regularization)的外在形式非常简单,就是在模型的损失函数中加上一个正则化项(regularizer),有时也被称为惩罚项(penalty term),如下方程所示,其中 L 为损失函数,J 为正则化项。通常来说,正则化项往往是关于模型参数的 1 - 范数或者 2 - 范数,当然也有可能是这两者的某种结合,例如 sklearn 的逻辑回归中的弹性网正则化项,其中加入模型参数的 1 - 范数的正则化也被称为 l1 正则化,加入模型参数的 2 - 范数的正则化也被称为 l2 正则化。
注:在数学和线性代数里,范数是衡量向量(或矩阵 )“大小、长度” 的工具,1 - 范数和 2 - 范数是常用类型,常应用于机器学习正则化等场景,以下从向量和矩阵角度说明:
向量的 1 - 范数、2 - 范数
-
1 - 范数(曼哈顿范数):
比如向量 v=(3,−2,5),1 - 范数为 ∣3∣+∣−2∣+∣5∣=3+2+5=10 ,可理解为在 “曼哈顿街区” 从一点到另一点的折线距离。 -
2 - 范数(欧几里得范数):
对向量 v=(v1,v2,…,vn),2 - 范数是各元素平方和的平方根,公式:
为什么需要正则化?有什么作用
一般来说,正则化核心的作用是缓解模型过拟合倾向,此外,由于加入正则化项后损失函数的形体发生了变化,因此也会影响损失函数的求解过程,在某些时候,加入了正则化项之后会让损失函数的求解变得更加高效。如此前介绍的岭回归,其实就是在线性回归的损失函数基础上加入了 w 的 1 - 范数,而 Lasso 则是加入了 w 的 2 - 范数。并且,对于逻辑回归来说,如果加入 l2 正则化项,损失函数就会变成严格的凸函数。
经验风险与结构风险
在我们构建损失函数求最小值的过程,其实就是依据以往经验(也就是训练数据)追求风险最小(以往数据误差最小)的过程,而在给定一组参数后计算得出的损失函数的损失值,其实就是经验风险。而所谓结构风险,我们可以将其等价为模型复杂程度,模型越复杂,模型结构风险就越大。而正则化后的损失函数在进行最小值求解的过程中,其实是希望损失函数本身和正则化项都取得较小的值,即模型的经验风险和结构风险能够同时得到控制。
模型的经验风险需要被控制不难理解,因为我们希望模型能够尽可能的捕捉原始数据中的规律,但为何模型的结构风险也需要被控制?核心原因在于,尽管在一定范围内模型复杂度增加能够有效提升模型性能,但模型过于复杂可能会导致另一个非常常见的问题 —— 模型过拟合,一旦模型过拟合了,尽管模型经验风险在降低、但模型的泛化能力会下降。因此,为了控制模型过拟合倾向,我们可以把模型结构风险纳入损失函数中一并考虑,当模型结构风险的增速高于损失值降低的收益时,我们就需要停止参数训练(迭代)。
二.过拟合
只有挖掘出贯穿始终的规律(同时影响训练数据和新数据的规律),模型才能够进行有效预测。不过,既然有些贯穿始终的全局规律,那就肯定存在一些只影响了一部分数据的局部规律。一般来说,由于全局规律影响数据较多,因此更容易被挖掘,而局部规律只影响部分数据,因此更难被挖掘,因此从较为宽泛的角度来看,但伴随着模型性能提升,也是能够捕获很多局部规律的。但是需要知道的是,局部规律对于新数据的预测并不能起到正面的作用,反而会影响预测结果,此时就出现模型过拟合现象。
以下解释代码明天后补