交叉验证
在本教程中,您将学习如何使用交叉验证来更好地衡量模型的性能。
本课程所需数据集夸克网盘下载链接:https://pan.quark.cn/s/9b4e9a1246b2
提取码:uDzP
文章目录
- 1、简介
- 2、什么是交叉验证
- 3、什么时候应该使用交叉验证?
- 4、举例
-
- 1)加载数据集
- 2)创建管道
- 3)获取MAE的得分
- 4)求取MAE的平均值
- 5、整体代码
- 6、总结
1、简介
机器学习是一个迭代的过程。
我们将面临使用什么预测变量、使用什么类型的模型、向这些模型提供什么参数等选择。到目前为止,您已经通过使用验证(或holdout)集来衡量模型质量以数据驱动的方式做出了这些选择。
但是,这种方法存在一些缺点。为了了解这一点,想象一下您有一个包含5000行的数据集。通常,您会将大约20%的数据保留为验证数据集,即1000行。但是这样做会在确定模型分数时留下一些随机机会。也就是说,一个模型可能在一组1000行上表现良好,即使在另一组1000行上表现不准确。
在极端情况下,您可以想象将验证集中只有1行数据。如果比较不同的模型,哪个在单个数据点上做出最好的预测将主要取决于运气!
一般来说,验证集越大,我们对模型质量的度量中随机性(即“噪声”)就越小,它就越可靠。不幸的是,我们只能通过从训练数据中删除行来获得一个大的验证集,而较小的训练数据集意味着更差的模型!
2、什么是交叉验证
在交叉验证中,我们对数据的不同子集运行建模过程,以获得模型质量的多个度量。
例如,我们可以将数据分成5个部分,每个部分占整个数据集的20%。
在本例中,我们将数据分成5个“折叠”。
- 在实验1中,我们使用第一个折叠作为验证集(或holdout),其他所有内容作为训练数据。这给了我们一个基于20% holdout集的模型质量度量。
- 在实验2中,我们持有来自第二次折叠的数据(并且使用除第二次折叠以外的所有方法来训练模型)。然后使用holdout集对模型质量进行第二次估计。
- 我们重复这个过程,使用每一个折叠一次作为抵抗。把这个在一起,100%的数据被用作抵抗在某种程度上,我们最终得到的模型质量,是基于所有的行数据集(即使我们不同时使用所有行)。
3、什么时候应该使用交叉验证?
交叉验证为模型质量提供了更精确的度量,如果我们要做很多建模决策,这一点尤其重要。然而,它可能需要更长的时间来运行,因为它估计了多个模型(每个折叠一个)。
那么,考虑到这些权衡,我们应该在什么时候使用每种方法呢?对于小型数据集,额外的计算负担并不大,我们应该运行交叉验证。
- 对于小型数据集,额外的计算负担并不是什么大问题,你应该运行交叉验证。
- 对于较大的数据集,单个验证集就足够了。您的代码将运行得更快,并且您可能拥有足够的数据,因此不需要重复使用其中的一些数据。
对于什么构成了大数据集和什么构成了小数据集,没有简单的阈值。但是如果你的模型只需要几分钟或者更少的时间就能运行,那么换成交叉验证可能是值得的。
或者,你可以运行交叉验证,看看每个实验的分数是否接近。如果每个实验产生相同的结果,一个单一的验证集可能就足够了。