我正在看这个教程: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:
答案 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个不同的分数(准确性百分比)。 我们通常以平均值来分析模型。
我们对所有要分析的不同模型重复此过程。 简要算法:
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"
执行此操作的简单原因,通常是数据不足,如果将整个数据集划分为:
我们可能遗漏了相对较小的数据块,可能会过分拟合我们的模型。 还有可能某些数据在我们的培训中保持不变,并且我们没有针对这些数据分析行为。
KF克服了这两个问题。
答案 2 :(得分:0)
该过程具有一个称为k的单个参数,该参数表示将给定数据样本拆分为的组数。这样,该过程通常称为k倍交叉验证。选择k的特定值时,可以在模型参考中使用k的特定值,例如k = 10变为10倍交叉验证。
您可以参考这篇文章以获取更多信息。 https://medium.com/@xzz201920/stratifiedkfold-v-s-kfold-v-s-stratifiedshufflesplit-ffcae5bfdf