【问题标题】: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:

【问题讨论】:

    标签: python scikit-learn cross-validation kaggle


    【解决方案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 个不同的分数(准确率百分比)。 而我们一般取平均值来分析模型。

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

      1. 将数据拆分为训练和测试部分。
      2. 在此训练数据上训练了不同的模型,例如 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.
      
      1. 分析不同的平均分数,从 SVM、RF 和 LR 中选出最佳模型。

      这样做的原因很简单,我们通常存在数据缺陷,如果我们将整个数据集划分为:

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

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

      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
        猜你喜欢
        • 1970-01-01
        • 2015-08-06
        • 2013-09-02
        • 2014-01-02
        • 2013-10-10
        • 2017-05-08
        • 2022-01-20
        • 2012-10-17
        • 2017-06-15
        相关资源
        最近更新 更多