机器学习问题中如何评价一个算法的好坏尤为重要,它决定了算法的改进方向。
有人想直接用训练集的误差来评价算法的优劣。
但利用训练集的误差并不是一个好选择;在过拟合的情况下,预测函数对训练样本吻合度很高,但对预测新的样本时准确度较低,将算法推广到其他新样本上时不适用。
如何判断算法是否过拟合?
第一种方法就是对预测函数 h(x) 画出图像,通过观察图像来看是否过拟合。
但有的时候输入特征变量可能有很多维,例如100个特征变量的函数就有100维,此时就不能通过画图来看模型是否存在过拟合的情况。
第二种方法我们把数据集分为2部分,拿70%的数据用来训练,剩下的30%作为验证集。验证集误差越小说明算法越实用,如果训练集的误差很小但验证集的误差很大就说明出现了过拟合现象。与此同时如果训练集的误差很大,预测误差也很大,则是未拟合。
根据机器学习的输出调整机器学习函数中的参数来优化算法的情况
例如防止过拟合中的lambda变量,或者需要选择预测函数的次数d (degree)。我们使用验证集来看哪个参数的效果最好,来确定预测函数。
但因为在优化模型的过程中用到了测试集中的数据,此时函数的参数有可能只针对测试集中的数据。模型中的参数根据测试集得到,又利用这个同一个测试集作为评价学习好坏的标准显然有失妥当。这些数据很可能更好的拟合训练集,而不是新样本。我们实际上希望对新样本的预测准确率高。
考虑到这种情况就不仅需要将数据集分为2个部分了,需要一个额外的部分叫做交叉验证集(cross validation 简称cv)
此时数据集有三个部分,比例大概是60%用来训练,20%交叉验证,20%用于测试集
会得到训练误差,交叉验证误差,测试误差三个J(θ)值
三个误差的作用如下
训练误差:在训练过程中对训练误差进行梯度下降,进行学习。
交叉验证误差:用于优化算法(例如选择预测函数的次数)。观察不同的模型在交叉验证集中的表现如何,并选出表现最好的。
测试误差:真正意义上检验算法的好坏,测试误差越小说明算法的表现越好。