交叉验证(Cross Validation)和网格搜索(Grid Search)是机器学习两大法宝
,前者用于检验模型的好坏,后者用于模型的调参。
就比如说,你要知道一辆车的好坏,我们需要一个客观公正的评价方法,不然车厂说自己的车好,顾客说这个车坏,我们就无法得到一辆车客观的好坏。在机器学习领域中,我们经常使用一种叫做交叉验证
的方法来帮助我们判断模型好坏
,那么我们接下来就探讨什么是交叉验证以及怎么使用。
1 K折交叉验证 Cross Validation
-
交叉验证(Cross-validation)主要用于建模应用中,在给定的建模样本中,拿出大部分样本进行建模,
留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录他们的平方加和。 -
正如下图所示, 交叉验证(Cross Validation)会把一份数据随机分成三个部分:训练集(training set)、验证集(validation set)、测试集(test set), 下面以高考为例,理解不同的数据集.
- 训练集用来训练模型,
就是我们平时做的作业,用于训练自己的能力
; - 验证集用于模型的选择,
就是我们的月考、模拟考,用于检验和反馈自己的能力;
- 测试集用于最终对学习方法的评估,
就是我们的高考,绝对保密,用于最终告诉你的能力水平(分数);
- 训练集用来训练模型,
首先将一份数据按照 8:2 划分出训练集和测试集。下图描述的就是K折交叉验证(K=10), 我们又称为十折交叉验证
。
2 K折交叉验证工作原理 Cross Validation
注:
测试集就像我们说的高考题,是绝对保密不参与训练过程的,用于最后检验(模型)能力好坏的。
-
用第 2-10 份数据作为训练集训练模型,用第 1 份数据作为验证集;
-
用第 1 和 3-10 份数据作为训练集训练模型,用第 2 份数据作为验证集;
-
用第 1-2 和 4-10 份数据作为训练集训练模型,用第 3 份数据作为验证集;
......
-
以此类推,用第 1-9 份数据作为训练集训练模型,用第 10 份数据作为验证集;
10 个验证分数的平均分数是模型的最终验证分数。(记住是验证集的平均分数
)
3 网格搜索算法
网格搜索法算法就是通过交叉验证的方