当前位置: 代码迷 >> 综合 >> 正则化与交叉验证|20mins 入门 | 《统计学习方法》学习笔记(五)
  详细解决方案

正则化与交叉验证|20mins 入门 | 《统计学习方法》学习笔记(五)

热度:19   发布时间:2023-12-21 14:18:48.0

一、正则化

正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。比如,正则化项可以是模型参数向量的范数
正则化一般有如下形式:
m i n f ∈ F 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) min_{f\in F}\frac{1}{N} \sum_{i=1}^NL(y_i,f(x_i)) + \lambda J(f) minfF?N1?i=1N?L(yi?,f(xi?))+λJ(f)
正则化项可以取不同的形式。例如,在回归问题中,损失函数是平方损失,正则化项可以是参数向量的 L 2 L_2 L2?范数:
L ( w ) = 1 N ∑ i = 1 N ( f ( x i ; w ) ? y i ) 2 + λ 2 ∣ ∣ w ∣ ∣ 2 L(w)=\frac{1}{N}\sum_{i=1}^N(f(x_i;w)-y_i)^2+\frac{\lambda}{2}||w||^2 L(w)=N1?i=1N?(f(xi?;w)?yi?)2+2λ?w2
这里, ∣ ∣ w ∣ ∣ ||w|| w表示参数向量 w w w L 2 L_2 L2?范数。

正则化项也可以是参数向量的 L 1 L_1 L1?范数:
L ( w ) = 1 N ∑ i = 1 N ( f ( x 1 ; w ) ? y i ) 2 + λ ∣ ∣ w ∣ ∣ 1 L(w)=\frac{1}{N}\sum_{i=1}^N(f(x_1;w)-y_i)^2+\lambda||w||_1 L(w)=N1?i=1N?(f(x1?;w)?yi?)2+λw1?
这里, ∣ ∣ w ∣ ∣ 1 ||w||_1 w1?表示参数向量 w w w L 1 L_1 L1?范数。

第1项的经验风险较小的模型可能较复杂(有多个非零参数),这时第2项的模型复杂度会较大。正则化的作用时选择经验风险与模型复杂度同时较小的模型。

正则化符合奥卡姆剃刀(Occam’s razor)原理。奥卡姆剃刀原理应用于模型选择时变为以下想法:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的的先验概率。可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率。

二、交叉验证

  • **定义:**把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,测试集来评估模型预测的好坏,在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”,是机器学习建立模型和验证模型参数时常用的办法。

  • **使用条件:**交叉验证用在数据不是很充足的时候。

    • 比如,对于普通适中问题,如果数据样本量小于一万条,我们就采用交叉验证来训练优化选择模型。
    • 如果样本大于一万条的话,我们一般随机把数据分成三份,一份为训练集(Training Set),一份为验证集(validation set),最后一份为测试集(Test Set)。用训练集来训练模型,用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。
  • 根据切分的方法不同,交叉验证可分为三种:

    • 简单交叉验证:相对于其他交叉验证方法而言。首先,将样本数据随机分为两部分(如:70%的训练集,30%的测试集),然后用训练集来训练模型,在测试集上验证模型及参数。接着,再把样本打乱,重新选择训练集和测试集,继续训练数据和检验模型。最后选择损失函数评估最优的模型和参数。

    • S折交叉验证(S-Folder Cross Validation):把样本数据随机分成S份,每次随机的选择S-1份作为训练集,剩下的一份做测试集。当这一轮完成后,重新选择S-1份来训练数据。若干轮(小于S)之后,选择损失函数评估最优的模型和参数。

      (如果有独立测试集,这块不参与S折交叉验证的,除了独立的验证集,剩下的数据分成S份,其中S-1份做训练集,1份做验证集来验证模型。此时一般不是按7:3分,而是按(S-1):1)

    • 留一交叉验证(Leave-one-out Cross Validation):第二种情况的特例,此时S等于样本数N,这样,对于N个样本,每次选择N-1个样本来训练数据,留一个样本来验证模型预测的好坏。此方法主要用于样本量非常少的情况,比如对于普通适中的问题,N小于50时,采用留一交叉验证。

    • 自助法(bootstrapping):数据量小于20。比如有m个样本,每次在m个样本中随机采集一个样本,放入训练集,采样后把样本放回。重复采集m次,得到m个样本组成的训练集。当然,这m个样本中很有可能有重复的样本数据。同时,用没有被采样到的样本做测试集。接着进行交叉验证。由于我们的训练集有重复数据,可能会改变数据的分布,因而训练结果训练结果会有估计偏差。因此,此种方法不是很常用,除非数据量真的很少。

  • 选择模型: 如果我们只是对数据做一个初步的模型建立,不是做深入分析的话,简单交叉验证即可。否则就用S折交叉验证。在样本量少的时候,使用S折交叉验证的特例留一交叉验证。