正则化的目的
在机器学习中,由于各种原因,如正负样本数目不平衡,特征数目过多等都可能导致过拟合现象。正则化的目的就是为了防止过拟合现象,通过以下两种方式:
- 去除不必要的特征(将其weight置为0)
- 惩罚不重要的特征
如上图从左到右分别为欠拟合,合适的拟合,过拟合,欠拟合可能是样本数目太少或者特征个数过少导致的。主要分析一下过拟合的现象。
- 打个形象的比方,给一群天鹅让机器来学习天鹅的特征,经过训练后,知道了天鹅是有翅膀的,天鹅的嘴巴是长长的弯曲的,天鹅的脖子是长长的有点曲度,天鹅的整个体型像一个“2”且略大于鸭子.这时候你的机器已经基本能区别天鹅和其他动物了。
- 然后,很不巧你的天鹅全是白色的,于是机器经过学习后,会认为天鹅的羽毛都是白的,以后看到羽毛是黑的天鹅就会认为那不是天鹅.
- 好,来分析一下上面这个例子:(1)中的规律都是对的,所有的天鹅都有的特征,是全局特征;然而,(2)中的规律:天鹅的羽毛是白的.这实际上并不是所有天鹅都有的特征,只是局部样本的特征。机器在学习全局特征的同时,又学习了局部特征,这才导致了不能识别黑天鹅的情况.
转自知乎:
链接:https://www.zhihu.com/question/32246256/answer/55251597
这表示学到的特征的权重由于样本的原因可能不是很准确,泛华能力比较差。使用正则化可以提高模型的泛华能力。
正则化可以避免过拟合的原因
正则化将一些不重要的特征的权值置为0或权值变小,使得特征的参数矩阵变得稀疏,参考上面的例子,它使模型变得简单,有效的规避了局部特征。
参数值越小模型越简单的原因:
为什么参数越小,说明模型越简单呢,这是因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大。
正则化方法
L0
范数
L0
范数是指向量中非0的元素的个数,
设
00=0
∥X∥0=∑i=0nx0i
使用
L0
范数来做正则化项,可以使特征稀疏,也可以很好的做出特征选择,缺点是求解比较麻烦。
L1范数
L1
范数是指向量中各个元素绝对值之和,
∥X∥1=∑i=0n|xi|
matlab调用函数norm(x,1),
L1
范数是各个参数的绝对值相加得到的,参数值大小和模型复杂度是成正比,因此模型越复杂,
L1
范数就越大,损失函数就越大,模型就越差。
使用
L1
范数可以实现特征稀疏,它比
L0
范数的优点是容易求解,因此通常都使用
L1
范数做正则化项而不是
L0
范数。
L2
范数
L2范数是各参数的平方和再求平方根,
∥X∥2=∑i=0n|xi|??????√
让
L2
范数做正则化项,可以使得特征weight向量的每个元素都很小,都接近于0,但与
L1
范数不同,
它不会让它等于0,而是接近于0,而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。
L1
正则化与
L2
正则化的比较
对于L1和L2规则化的代价函数来说,我们可以写成以下形式:
Lasso
minw1n|Y?WτX|s.t.∥W∥1≤C
Ridge
minw1n|Y?WτX|s.t.∥W∥2≤C
虑两维的情况,在(w1,w2)平面上可以画出目标函数的等高线,而约束条件则成为平面上半径为C的一个 norm ball 。等高线与 norm ball 首次相交的地方就是最优解:
通过可视化可以很明显的发现,使用
L1
正则化在取得最优解的时候
w1
的值为0,相当于去掉了这一个特征。而使用
L2
正则化在取得最优解的的时候其都有值。
结论:
L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。在所有特征中只有少数特征起重要作用的情况下,选择Lasso比较合适,因为它能自动选择特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那么使用Ridge也许更合适。
Reference
- http://www.52php.cn/article/p-zqcpdokc-me.html
- https://www.zhihu.com/question/20700829
- http://www.52php.cn/article/p-ghjzqxtq-ban.html
- http://www.52php.cn/article/p-pxmfcjvw-bmk.html