《机器学习(周志华)》笔记--模型的评估与选择(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)为什么需要验证集?

    答:在机器学习中,通常需要评估若⼲候选模型的表现并从中选择模型,这⼀过程称为模型选择。可供选择的候选模型可以是有着不同超参数的同类模型。以神经网络为例,我们可以选择隐藏层的个数,学习率大小和激活函数。为了得到有效的模型,我们通常要在模型选择上下⼀番功夫。从严格意义上讲,测试集只能在所有超参数和模型参数选定后使⽤⼀次。不可以使⽤测试数据选择模型,如调参。由于⽆法从训练误差估计泛化误差,因此也不应只依赖训练数据选择模型。鉴于此,我们可以预留⼀部分在训练数据集和测试数据集以外的数据来进行模型选择。这部分数据被称为验证数据集,简称验证集。

    为了方便大家理解,举一个生活中的案例进行类比,我们一般是通过考试衡量学生的学习情况。老师上完课后,给学生布置的作业相当于训练数据集,中期的测试题相当于验证集,期末考试题相当于测试数据集。为了更加客观的衡量学生学习情况,期末考试题的内容不应该出现在平常的作业题和中期的测试题中,因为之前做过的题,对于计算机而言,相当于已经记住了,如果再次做同样的题,准确率就会很高。同样的道理,平常的作业题也不应该出现在中期的测试题里。中期的测试题,是为了掌握学生的学习情况,了解自己哪些方面内容没掌握,从而调整下一步学习的方向,为期末考试做好准备。

三、评估方法

  1、留出法(hold-out)

  直接将数据集D划分为两个互斥集合,其中一个集合作为训练集S,另一个作为测试集T,即D = S ∪ T,S ∩ T = ø  。 S 上训练出模型后,用 T 来评估其测试误差,作为对泛化误差的估计。

 举例:

  以二分类任务为例,假定 D 包含1000个样本,将其划分为 S 包含700个样本,T 包含300个样本,用 S 进行训练后,如果模型在 T 上有9个样本分类错误,那么其错误率为(90/300)* 100% = 30%,相应的,精度为1 - 30%  = 70% 。

  注意点:

  ① 训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的误差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。如果从采样(sampling)的角度看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”(stratified sampling)。若S 、T中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的比例而产生偏差。

  ② 即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集 D 进行分割。不同的划分将导致不同的训练/测试集,相应的,模型评估的结果也会有差别。因此,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。

  我们希望评估的是用 D 训练出的模型的性能,但留出法需划分训练/测试集,这就会导致一个窘境:若令训练集 S 包含绝大多数样本,则训练出的模型可能更接近于用 D 训练出的模型,但由于 T 比较小,评估结果可能不够稳定准确;若令测试集 T 多包含一些样本,则训练集 S 和 D 差别就更大了,被评估的模型与用 D 训练出的模型相比可能有较大差别,从而降低了评估结果的保真性。  

  2、K折交叉验证

  由于验证数据集不参与模型训练,当训练数据不够⽤时,预留⼤量的验证数据显得太奢侈。⼀种改善的⽅法是 K 折交叉验证。

  在 K 折交叉验证中,我们把原始训练数据集分割成 K 个不重合的⼦数据集,然后我们做K次模型训练和验证。每⼀次,我们使⽤⼀个⼦数据集验证模型,并使⽤其它 K−1 个⼦数据集来训练模型。在这 K 次训练和验证中,每次⽤来验证模型的⼦数据集都不同。最后,我们对这 K 次训练误差和验证误差分别求平均

  举例:

                        

  k 的值由我们自己来指定,以上为 5 折交叉验证。

    还是以考试为例,解释上图内容。交叉验证,相当于把平常的作业题和中期的测试题合并成一个题库,然后等分成几份。图中所示,将题库分成了五份,第一行的意思是,先让学生做后面的四份训练题,再用第一份题进行测试。以此类推,再重复四次,每一次相当于重新进行学习。最后,取五次的平均成绩,平均成绩高,说明老师的教学方法好,对应到模型,就是超参数更好。

    假定数据集 D 中包含 m 个样本,若令k = m ,则得到交叉验证法的一个特例:留一法

    留一法——n折交叉验证(n是数据集中样本的数目),即每次用一个样本做验证集,其余的样本做训练集。留一法的一个优点是每次迭代中都使用了最大可能数目的样本来训练。另一个优点是该方法具有确定性。

  3、自助法

  统计学中,自助法是一种从给定训练集中有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。

  自助法以自助采样法为基础,给定包含 m 个样本的数据集 D,我们对它进行采样产生数据集 D’;每次随机从 D 中挑选一个赝本,将其拷贝放入 D’,然后再将该样本放回初始数据集 D 中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行 m 次后,就得到了包含m个样本的数据集 D’,这就是自助采样的结果。

  自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差

  集成学习:在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型。集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。集成方法是将几种机器学习技术组合成一个预测模型的元算法,以达到减小方差、偏差或改进预测的效果。

  

猜你喜欢

转载自www.cnblogs.com/lsm-boke/p/12182183.html