首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

算法研习:机器学习中的K-Fold交叉验证

喜欢就点关注吧!

在我们训练机器学习模型时,为提高模型拟合效果,经常使用K-Fold交叉验证,这是提高模型性能的重要方法。在这篇文章中,我们将介绍K-Fold交叉验证的基本原理,以及如何通过各种随机样本来查看数据。

什么是K-Fold交叉验证

交叉验证是用于估计机器学习模型技能的统计方法。也是一种用于评估有限数据样本的机器学习模型的重采样方法。该方法简单且易于理解。K-Fold将将数据集拆分为k个部分。每次使用k-1个部分当做训练集,剩下的一个部分当做验证集进行模型训练,即训练K次模型。其具体步骤如下:

随机化打乱数据集。

将数据集拆分为k个组

对于每个组:将该组作为测试集

将剩余的组作为训练集

在训练集上拟合模型并在测试集上进行评估

保留该模型的评估分数

使用模型评估分数样本评价模型的性能

K值的选择

必须仔细选择k值来划分数据样本。选择不当的k值可能导致对模型性能的错误估计,例如具有高方差(可能基于用于拟合模型的数据而改变很多),或者高偏差(例如高估模型的技巧)。

现在,总结选择k值的三种常用策略如下:

代表性:选择k的值使得每个训练/测试组的数据样本足够大以在统计上代表更广泛的数据集。

k = 10:k的值固定为10,这是通过实验发现的值,通常导致具有低偏差的模型技能估计,适度的方差。

k = n:k的值固定为n,其中n是数据集的大小,以便为每个测试样本提供在holdout数据集中使用的机会。这种方法称为留一交叉验证。

K-Fold的类型

分层K-Fold:

分层K-Fold是KFold的变体。首先,分层K-Fold将数据分组,然后将数据分成n_splits部分和Done。现在,它将使用每个部分作为测试集。请注意,它只会在分割之前一次洗牌数据。

使用shuffle = True,我们的random_state会对数据进行洗牌。否则,数据由np.random(默认情况下)进行混洗。例如,n_splits = 4,我们的数据y(因变量)有3个类(标签)。4个测试集既能够覆盖所有数据,没有任何重叠。

分层洗牌K折叠:

分层洗牌分割是ShuffleSplit的变种。首先,StratifiedShuffleSplit对我们的数据进行洗牌,然后它还将数据拆分为n_splits部分。在此步骤之后,StratifiedShuffleSplit选择一个部分作为测试集。然后重复n_splits-1次,以获得n_splits-1个测试集。如果我们查看下面的图片,使用相同的数据,4个测试集不会涵盖所有数据,即测试集之间存在重叠。

因此,这里的差异是StratifiedKFold只是洗牌和分裂一次,因此测试集不重叠,而StratifiedShuffleSplit 每次在分裂之前进行混洗,并且它会分割n_splits 次以使测试集可以重叠。

结论

在k-Fold交叉验证中存在与k选择相关的偏差 - 方差权衡。一般我们使用k = 5或k = 10进行k折交叉验证,以产生既不受过高偏差也不受非常高方差影响的测试误差率估计。

如果选择的k值不能均匀地分割数据样本,则一个组将包含多余的样本。因此划分样本时优先将数据样本分成具有相同数量的k个组,从而使得模型评估结果的公平。

参考

https://medium.com/towards-artificial-intelligence/importance-of-k-fold-cross-validation-in-machine-learning-a0d76f49493e

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190722A045TW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券