喜欢就点关注吧!
在我们训练机器学习模型时,为提高模型拟合效果,经常使用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
领取专属 10元无门槛券
私享最新 技术干货