《机器学习(周志华)》笔记--模型的评估与选择(1)--经验误差与拟合、偏差与方差
一、经验误差与拟合
1、模型的评估
机器学习的目的是使学到的模型不仅对已知数据而且对未知数据都能有很好的预测能力。不同的学习方法会训练出不同的模型,不同的模型可能会对未知数据作出不同的预测,所以,如何评价模型好坏,并选择出好的模型是我们所学的重点。
2、训练集与测试集
(1)为什么要划分训练集和测试集?
答:我们想要利用收集的西瓜数据构建一个机器学习模型,用来预测新的西瓜的好坏,但在将模型用于新的测量数据之前,我们需要知道模型是否有效,也就是说,我们是否应该相信它的预测结果。不幸的是,我们不能将用于构建模型的数据用于评估模型的性能。因为我们的模型会一直记住整个训练集。所以,对于训练集中的任何数据点总会预测成正确的标签。这种记忆无法告诉我们模型的泛化能力如何,即预测新样本的能力如何。我们要用新数据来评估模型的性能。新数据是指模型之前没见过的数据,而我们有这些新数据的标签。通常的做法是,我们把手头上的数据分为两部分,训练集与测试集。训练集用来构建机器学习模型,测试集用来评估模型性能。
(2)如何划分训练集与测试集?
答:通常的做法是,我们将手头数据的百分之 70 或 80 用来训练数据,剩下的百分之 30 或 20 作为测试用来评估模型性能。值得注意的是,在划分数据集之前,我们要先把手头上的数据的顺序打乱,因为我们搜集数据时,数据可能是按照标签排放的。比如,现在有 100 个西瓜的数据,前 50 个是好瓜,后 50 个是坏瓜,如果将后面的 30 个西瓜数据当做测试集,这时测试集中只有坏瓜一个类别,这无法告诉我们模型的泛化能力如何,所以我们将数据打乱,确保测试集中包含所有类别的数据。
(3)相关要点:
错误率(error rate):分类错误的样本占样本总数的比例(即如果在m个样本中有a个样本分类错误,则错误率E = a / m)。
精度(accuracy):分类正确的样本占样本总数的比例(1 - a/m,即精度 = 1 - 错误率)。
误差(error):学习器的预测输出与样本的真实输出之间的差异。
训练误差(training error) / 经验误差(empirical error):学习器在训练集上的误差。
泛化误差(generalization error):学习器在测试集上的误差。
泛化误差越小意味着新样本预测的准确性越高,然而,我们并不知道新样本是什么样子,实际能做的是努力使训练误差最小化,在很多情况下,我们可以学习到一个训练误差神效,在训练集上表现很好的学习器。很遗憾,这种学习器在很多情况下都不好。我们希望得到的学习器应该是在新样本表现很好的学习器,就是要从训练样本中学习到所有潜在样本的“普遍规律”,这样在遇到新样本时才能进行正确的判断。当学习器把训练样本学得太好的时候,很可能把样本的一些特有的特点当作所有样本都有有的一般性质,导致泛化能力下降,我们不能期待一个在训练集上表现不好的学习器在测试集有更好的表现。
3、欠拟合与过拟合
(1)欠拟合
欠拟合:模型在训练集上误差很高。
欠拟合原因:模型过于简单,没有很好的捕捉到数据特征,不能很好的拟合数据。
举例说明:
如图,我们的数据是一份非线性数据,如果你想要用线性回归来拟合这份数据,由于数据是非线性的,模型是线性,则过于简单。所以,无论模型怎么训练,最终都不能很好的拟合数据。
(2)过拟合
过拟合:在训练集上误差低,测试集上误差高;
过拟合原因:模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样就会导致在后期测试的时候不能够很好地识别数据,模型泛化能力太差。
如图,在训练集上,模型为了拟合数据,添加了更多的多次项,使模型过于复杂,对噪音数据也能很好的拟合,所以在训练集上正确率很高,而在测试集上没有这些噪音数据,所以正确率很低。
二、偏差和方差
1、模型误差来源
我们知道了欠拟合是模型在训练集上误差过高,过拟合模型是在训练集上误差低,在测试集上误差高。
那么模型误差的来源是什么呢?
其实,模型在训练集上的误差来源主要来自于偏差,在测试集上误差来源主要来自于方差。
举例:
上图表示,如果一个模型在训练集上正确率为 80%,测试集上正确率为 79% ,则模型欠拟合,其中 20% 的误差来自于偏差,1% 的误差来自于方差。如果一个模型在训练集上正确率为 99%,测试集上正确率为 80% ,则模型过拟合,其中 1% 的误差来自于偏差,19% 的误差来自于方差。
可以看出,欠拟合是一种高偏差的情况。过拟合是一种低偏差,高方差的情况。
2、偏差与方差
偏差:预计值的期望与真实值之间的差距;
方差:预测值的离散程度,也就是离其期望值的距离。
举例:
2.1.1偏差与方差 2.1.2 欠拟合 2.1.3 过拟合
以射击打靶为例,蓝色的小点是我们在靶子上的射击记录,蓝色点的质心(黑色点)到靶心的距离为偏差,某个点到质心的距离为方差。所以,某个点到质心的误差就是由偏差与方差所组成。
欠拟合:欠拟合是因为模型过于简单,模型过于简单我们可以当做是我们射击时射击的范围比较小,它所涵盖的范围不包括靶心,所以无论怎么射击,射击点的质心里靶心的距离都很远,所以偏差很高。但是因为射击范围很小,所以所有射击点相互离的比较紧密,则方差低。
过拟合:过拟合是因为模型过于复杂,我们可以理解为这个时候射击的范围很大了,经过不断的训练射击的点的质心离靶心的距离很近了,但是由于数据量有限,而射击范围很大,所以所有射击点之间非常离散,也就是方差很大。
3、验证集
(1)为什么需要验证集?
答:在机器学习中,通常需要评估若⼲候选模型的表现并从中选择模型,这⼀过程称为模型选择。可供选择的候选模型可以是有着不同超参数的同类模型。以神经网络为例,我们可以选择隐藏层的个数,学习率大小和激活函数。为了得到有效的模型,我们通常要在模型选择上下⼀番功夫。从严格意义上讲,测试集只能在所有超参数和模型参数选定后使⽤⼀次。不可以使⽤测试数据选择模型,如调参。由于⽆法从训练误差估计泛化误差,因此也不应只依赖训练数据选择模型。鉴于此,我们可以预留⼀部分在训练数据集和测试数据集以外的数据来进行模型选择。这部分数据被称为验证数据集,简称验证集。
为了方便大家理解,举一个生活中的案例进行类比,我们一般是通过考试衡量学生的学习情况。老师上完课后,给学生布置的作业相当于训练数据集,中期的测试题相当于验证集,期末考试题相当于测试数据集。为了更加客观的衡量学生学习情况,期末考试题的内容不应该出现在平常的作业题和中期的测试题中,因为之前做过的题,对于计算机而言,相当于已经记住了,如果再次做同样的题,准确率就会很高。同样的道理,平常的作业题也不应该出现在中期的测试题里。中期的测试题,是为了掌握学生的学习情况,了解自己哪些方面内容没掌握,从而调整下一步学习的方向,为期末考试做好准备。