python中的KFold到底是做啥的?
Posted
技术标签:
【中文标题】python中的KFold到底是做啥的?【英文标题】:What does KFold in python exactly do?python中的KFold到底是做什么的? 【发布时间】:2016-07-03 22:42:59 【问题描述】:我正在看这个教程:https://www.dataquest.io/mission/74/getting-started-with-kaggle
我进入第 9 部分,进行预测。其中有一些数据位于名为 titanic 的数据框中,然后使用以下命令将其分成折叠:
# Generate cross validation folds for the titanic dataset. It return the row indices corresponding to train and test.
# We set random_state to ensure we get the same splits every time we run this.
kf = KFold(titanic.shape[0], n_folds=3, random_state=1)
我不确定它到底在做什么以及 kf 是什么类型的对象。我尝试阅读文档,但没有太大帮助。还有就是三折(n_folds=3),为什么后面这行只访问train和test(我怎么知道叫train和test)?
for train, test in kf:
【问题讨论】:
【参考方案1】:该过程有一个称为 k 的参数,它指的是给定数据样本要分成的组数。因此,该过程通常称为 k 折交叉验证。 When a specific value for k is chosen, it may be used in place of k in the reference to the model, such as k=10 becoming 10-fold cross-validation..
您可以参考这篇文章了解更多信息。 https://medium.com/@xzz201920/stratifiedkfold-v-s-kfold-v-s-stratifiedshufflesplit-ffcae5bfdf
【讨论】:
【参考方案2】:分享我目前学到的有关 KF 的理论信息。
KFOLD 是一种模型验证技术,它不使用您的预训练模型。相反,它只是使用超参数并使用 k-1 个数据集训练一个新模型,并在第 k 个数据集上测试相同的模型。
K 个不同的模型仅用于验证。
它将返回基于第 k 个测试数据集的 K 个不同的分数(准确率百分比)。 而我们一般取平均值来分析模型。
我们对要分析的所有不同模型重复此过程。 简要算法:
-
将数据拆分为训练和测试部分。
在此训练数据上训练了不同的模型,例如 SVM、RF、LR。
2.a Take whole data set and divide in to K-Folds. 2.b Create a new model with the hyper parameter received after training on step 1. 2.c Fit the newly created model on K-1 data set. 2.d Test on Kth data set 2.e Take average score.
-
分析不同的平均分数,从 SVM、RF 和 LR 中选出最佳模型。
这样做的原因很简单,我们通常存在数据缺陷,如果我们将整个数据集划分为:
-
培训
验证
测试
我们可能会遗漏相对较小的数据块,这可能会使我们的模型过拟合。 也有可能一些数据在我们的训练中保持不变,并且我们没有针对这些数据分析行为。
KF 克服了这两个问题。
【讨论】:
【参考方案3】:KFold 将提供训练/测试索引来拆分训练和测试集中的数据。它将数据集拆分为k
连续折叠(默认情况下不进行洗牌)。然后每个折叠使用一次验证集,而k - 1
剩余折叠形成训练集(source)。
假设您有一些从 1 到 10 的数据索引。如果您使用 n_fold=k
,在第一次迭代中您将获得 i
'th (i<=k)
折叠作为测试索引,其余的 (k-1)
折叠(没有i
'th fold) 一起作为训练索引。
一个例子
import numpy as np
from sklearn.cross_validation import KFold
x = [1,2,3,4,5,6,7,8,9,10,11,12]
kf = KFold(12, n_folds=3)
for train_index, test_index in kf:
print (train_index, test_index)
输出
折叠 1:[ 4 5 6 7 8 9 10 11] [0 1 2 3]
折叠 2:[ 0 1 2 3 8 9 10 11] [4 5 6 7]
折叠 3:[0 1 2 3 4 5 6 7] [ 8 9 10 11]
sklearn 0.20 的导入更新:
KFold 对象在 0.20 版本中移至 sklearn.model_selection
模块。要在 sklearn 0.20+ 中导入 KFold,请使用 from sklearn.model_selection import KFold
。 KFold 当前文档source
【讨论】:
我明白了。无论 n_folds 是什么,您最终仍然只是一个测试集和一个训练集。如果 n_folds 为 2,那么您只需将一半数据用于训练,另一半用于测试,然后交换它们。我理解正确吗? 是的。您将获得第 i 个 (1 这不是一个准确的描述,术语验证集和测试集可以互换使用,这是不正确的。请看scikit-learn.org/stable/modules/cross_validation.html以上是关于python中的KFold到底是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章
DrawShadow 中的 Elevation 到底是做啥的?