误差、过拟合、正则化、交叉验证、泛化能力详解
1.训练误差与测试误差
机器学习的目的就是使学习得到的模型不仅对训练数据有好的表现能力,同时也要对未知数据具有很好的预测能力,因此给定损失函数的情况下,我们可以得到模型的训练误差(训练集)和测试误差(测试集),根据模型的训练误差和测试误差,我们可以评价学习得到的模型的好坏。
同时需要注意的是,统计学习方法具体采用的损失函数未必是评估时使用的损失函数,两者相同的情况下是比较理想的。
假设我们最终学习到的模型是Y = f(x),训练误差是模型Y = f(x)关于训练数据集的经验损失:
其中N是训练集样本数量。
测试误差是模型Y = f(x)关于测试数据集的经验损失:
其中N'是测试集样本数量。
2.过拟合问题
上一篇文章中已经简单介绍了过拟合问题,现在详细介绍一下过拟合问题:
当假设空间含有不同复杂度时的模型时,就要面临模型选择的问题。现在假设存在一个“真模型”,能够完美的对数据进行分类,所以当我们选择模型时,希望能够找到一个无限逼近“真模型”的一个模型。具体的是所选择的模型应与“真模型”的参数个数相同,所选择的模型的参数向量应与“真模型”的参数向量相近。
而在优化模型时,如果我们一味地追求模型对训练数据的预测能力,就会不可避免的使模型的复杂度提高,这时就会出现过拟合问题,如下图(摘自《统计学习方法》),随着模型次数的增加,模型能很好的拟合训练数据,但是会偏离“真模型”。
3.正则化
正则化也上一篇文章中也简单的介绍了一下,其实正则化是防止模型过拟合很好的方法,通过加入模型复杂度这一惩罚项,限制模型变得复杂,从而解决了过拟合问题。
常用的正则化项有三种(L0、L1、和L2范数):
L0范数:其实就是向量中非零元素的个数;
L1范数:向量中各个元素绝对值之和;
L2范数:向量中所有元素绝对值的平方和再开方;
不同的范数都可以有效的防止模型过拟合,但是不同范数效果不同,L1范数可以使模型变得稀疏性,而L2范数不会使变得稀疏,但是能很好的限制模型的复杂度(上图所示)。具体请参考:L0、L1、L2范数,这篇文章很好地介绍了各种范数的作用原理。
4.交叉验证
交叉验证是模型选择常用的一种方法,该方法主要使用于样本数据充足的情况,我们可以将样本数据划分为:训练集、交叉验证集和测试集三个数据集。其中训练集主要是根据数据去调节模型的参数,而交叉验证集的作用主要是调节模型的超参数,测试集是评估训练得到模型的泛化能力(请参考参数与超参数的区别)。
交叉验证集的基本思想就是:重复的使用数据,把给定的数据进行划分,将划分的数据集组合成训练集和测试集,在此基础上反复地进行训练、测试以及模型选择。
交叉验证主要有三种方法:
1.简单交叉验证
将数据随机分为两部分(70%的数据为训练集,30%的数据为测试集),一部分作为训练集,另一部分作为测试集。
2.N折交叉验证
N折交叉验证是交叉验证中最常用的一种方法,方法是随机将数据分为N个互不相交的大小相同的子集,然后利用S-1个子集的数据作为训练集,剩下的子集作为测试集,将这一过程对可能的S种选择重复进行,最后选出S次评测中平均测试误差最小的模型。
3.留一交叉验证
S折交叉验证的特殊情况是S=N,称为留一交叉验证法,往往是数据量较小的情况下使用。
5.泛化能力
学习方法的泛化能力是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上重要的性质,常用的方法是通过测试误差来衡量泛化能力,但是这种方法依赖测试数据,但是由于测试数据是有限的,因此评价结果不是完全可靠的。
每天进步一点点~