python中的KFold到底做了什么?

时间:2016-03-17 14:09:26

标签: python cross-validation kaggle

我正在看这个教程: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),为什么以后只能访问火车和测试(我怎么知道它们被称为火车和测试)?

for train, test in kf:

3 个答案:

答案 0 :(得分:12)

KFold将提供列车/测试索引,以便在列车和测试集中分割数据。它会将数据集拆分为k个连续折叠(默认情况下不进行洗牌)。然后,每个折叠使用一次验证集,而k - 1剩余折叠形成训练集(source)。 / p>

假设您有一些从1到10的数据索引。如果您使用n_fold=k,则在第一次迭代中,您将获得i'(i<=k)次折叠作为测试索引并保留{ {1}}折叠(没有(k-1)'折叠)作为列车索引。

一个例子

i

输出

  

折叠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中的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) 模块。要在sklearn 0.20+中导入KFold,请使用sklearn.model_selection。 KFold当前文档source

答案 1 :(得分:1)

分享到目前为止我学到的有关KF的理论信息。

KFOLD是一种模型验证技术,它不使用您的预先训练的模型。相反,它只是使用超参数并使用k-1数据集训练了一个新模型,并在第k个数据集上测试了该模型。

  

K个不同的模型仅用于验证。

它将基于第k个测试数据集返回K个不同的分数(准确性百分比)。 我们通常以平均值来分析模型。

我们对所有要分析的不同模型重复此过程。 简要算法:

  1. 将数据拆分到训练和测试部分。
  2. 经过训练的不同模型会在此训练数据上说SVM,RF,LR。
lst <- list(a=1.23,b=2.3)
expression <- "italic(y)==a*italic(x)*b"

for (name in names(lst)) {
    expression <- gsub(paste0("\\b", name, "\\b"), lst[[name]], expression)
}

print(expression)

[1] "italic(y)==1.23*italic(x)*2.3"
  1. 分析不同的平均分数,并从SVM,RF和LR中选择最佳模型。

执行此操作的简单原因,通常是数据不足,如果将整个数据集划分为:

  1. 培训
  2. 验证
  3. 测试

我们可能遗漏了相对较小的数据块,可能会过分拟合我们的模型。 还有可能某些数据在我们的培训中保持不变,并且我们没有针对这些数据分析行为。

KF克服了这两个问题。

答案 2 :(得分:0)

该过程具有一个称为k的单个参数,该参数表示将给定数据样本拆分为的组数。这样,该过程通常称为k倍交叉验证。选择k的特定值时,可以在模型参考中使用k的特定值,例如k = 10变为10倍交叉验证。

您可以参考这篇文章以获取更多信息。 https://medium.com/@xzz201920/stratifiedkfold-v-s-kfold-v-s-stratifiedshufflesplit-ffcae5bfdf