首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法研习:机器学习中的K-Fold交叉验证

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

作者头像
深度学习与Python
发布2019-07-23 17:20:59
1.9K0
发布2019-07-23 17:20:59
举报

喜欢就点关注吧!

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

什么是K-Fold交叉验证

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

  1. 随机化打乱数据集。
  2. 将数据集拆分为k个组
  3. 对于每个组:将该组作为测试集
  4. 将剩余的组作为训练集
  5. 在训练集上拟合模型并在测试集上进行评估
  6. 保留该模型的评估分数
  7. 使用模型评估分数样本评价模型的性能

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习与python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是K-Fold交叉验证
  • K值的选择
  • K-Fold的类型
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档