1.问题引入
基于一些已知样本,根据其变量(是否出现胸痛、是否有良好的血液循环、是否有闭锁的动脉、体重指标),预测其是否患有心脏病(左侧)。接着,出现一个新来的患者,我们可以测量或询问这些变量,然后基于这些变量预测其是否患有心脏病(右侧)。
2.交叉验证法的作用
要回答上面的问题,首先需要决定使用哪种机器学习方法。可供选择的机器学习算法有很多种,如logistic回归(logistic regression)、K-最近邻居法(K-nearest neighbors)、支持向量机(SVM)等等。但是我们应该选择哪种方法呢?
交叉验证法能帮助我们实现多种机器学习方法的比较,并有助于我们了解这些方法在实际数据中的性能。
3.机器学习的2个主要内容
假设蓝色的柱子代表我们收集到的所有样本(包括患有心脏病和不患有心脏病的患者)。基于该数据,我们需要完成两件主要的事情:
(1)估计每一种机器学习方法的参数。
- 如利用部分数据确定logistic回归的曲线的参数以决定该曲线的形态。在机器学习中,估计模型参数被称为训练算法(training the algorithm)。
(2)评估该模型的性能。
- 如我们需要评价已训练的模型是否在新数据中表现良好,例如已经训练好的logistic模型是否能在新的数据中表现出良好的预测性能。在机器学习中,评估一种模型性能被称为测试算法(testing the algorithm)。
4.交叉验证法在机器学习中的重要作用
正如我们在前面一小节学到的那样,实现机器学习的两大内容,需要训练数据集和测试数据集。参考:机器学习简介。
- 糟糕的方法:使用所有的数据训练机器学习方法。因为如果将所有的样本数据用作训练数据,我们将没有可用作测试数据的样本。重复使用该数据作用测试数据,将不利于评估模型在训练样本以外的样本中的性能。这就好比一个老师教授知识,然后又由同一个老师出题考试,自然是考验不出学生们的真实水平。
- 相对较好的方法:将所有样本的前75%用作训练样本,余下的25%作为测试样本。接着比较不同机器学习方法在该训练样本和测试样本中的性能。这样的话,就可以在训练数据集以外的数据集中进行模型测试,好比找一个其他老师来出题,更能体现学生的知识掌握程度。
- 更好的办法:交叉验证法。四折交叉验证法(four-fold cross validation)将样本随机分成4份,其中任意3份均用作训练样本,剩余1份用作测试样本。依次记录每一种方法在每一次测试样本中的表现(正确分类的样本数、错误分类的样本数)。
5.常见的交叉验证模型
5.1 四折交叉验证
- 前面介绍了交叉验证在机器学习中的重要作用,下面我们介绍常用的交叉验证方法。将所有的样本随机均分成4份。
- 第一次:使用前3份作为训练集训练模型,第4份作为测试集测试模型,记录模型在测试集中的表现情况。正确5个人,错误1个。
- 第二次:使用第1,2,4份作为训练集训练模型,第3份作为测试数据集测试模型,记录模型在测试数据集中的表现情况。正确4个,错误2个。
- 第三次:使用第1,3,4份作为训练集训练模型,第2份作为测试数据集测试模型,记录模型在测试数据集中的表现情况。正确1个,错误5个。
- 第四次:使用第2,3,4份作为训练集训练模型,第1份作为测试数据集测试模型,记录模型在测试数据集中的表现情况。正确6个,错误0个。
- 汇总不同模型4次在测试数据集中的判断结果。将每种方法的总体结果进行比较:如支持向量机(SVM)在测试样本中的正确分类个数为18,错误分类个数为6,其表现性能优于其他两种方法(logistic 回归)和KNN(K-最近邻居法)。故我们可以考虑选择SVM。
5.2 留一法交叉验证
交叉验证中,样本可以被等分成任意等份。极端的例子是留一法交叉验证(leave one out cross validation),将n个样本等分成n等份,任意一份均被当做测试数据。方法和原理同四折交叉验证。
5.3 十折交叉验证
最常见的交叉验证是十折交叉验证(ten-fold cross validation),将所有样本进行十等分,其中任意一等份均被当为测试数据。如下图所示,蓝色对应的9/10样本依次作为训练数据集训练模型,黄色对应的1/10样本依次被当做测试数据集测试模型,这样的方法被称为十折交叉验证。具体如何利用十折交叉模型判定不同模型的优劣,请参见四折交叉模型。
6.交叉验证法的其他作用
在训练模型时,除了通过训练数据集确定模型参数外。为了使得结果的准确度更高,可以通过加入额外的调整参数(Tuning parameter)的方式进行结果调整。而添加的参数是猜测出来,而不是根据样本数据估计出来的。
为了使额外的参数更有助于预测,可以使用交叉样本法选定最佳的调整参数,如在logistic回归中的调整参数。这在后续的学习中我们将补充这一知识点。
7.小结
这一小节中,我们主要学习了交叉验证法在确定训练数据集和测试数据集中的意义,以及在选定最佳机器学习模型中的重要作用。
参考视频:https://www.youtube.com/watch?v=fSytzGwwBVw
编辑:吕琼
校审:罗鹏