【问题标题】:Cross validation in cross_val_scorecross_val_score 中的交叉验证
【发布时间】:2022-10-04 18:01:31
【问题描述】:

在 python 中拟合我的数据时,我通常会这样做:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

我将我的数据分成两块:一个用于训练,另一个用于测试。

之后,我将我的数据与:

model.fit(X_train,y_train)
y_pred = model.predict(X_test,y_test)

我可以通过以下方式获得准确性:

accuracy_score(y_test,y_pred)

我理解这些步骤。 但是sklearn.model_selection.cross_val_score 发生了什么?例如:

cross_val_score(estimator= model, X= X_train,y=y_train,cv=10). 

它是在做我以前做过的所有事情,但做了 10 次吗?

我是否必须拆分数据来训练、测试集?据我了解,它拆分数据、拟合数据、预测测试数据并获得准确度分数。 10倍。在一条线上。

但我看不出训练集和测试集有多大。我可以手动设置吗?每次运行它们的大小是否相同?

【问题讨论】:

    标签: scikit-learn cross-validation


    【解决方案1】:

    函数“train_test_split”以分割比率随机分割训练集和测试集。

    而下面的“cross_val_score”函数进行 10 倍交叉验证。

    cross_val_score(estimator= model, X= X_train,y=y_train,cv=10)
    

    在这种情况下,主要区别在于 10-Fold CV 不会对数据进行洗牌,并且折叠按与原始数据相同的顺序循环。如果数据的顺序对交叉验证很重要,您应该批判性地思考,这取决于您的特定应用程序。

    选择使用哪种验证方法:https://stats.stackexchange.com/questions/103459/how-do-i-know-which-method-of-cross-validation-is-best

    您可以在此处阅读有关 K-Fold 的文档:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold

    【讨论】:

      【解决方案2】:

      根据我的理解,如果你设置cv=10,它会将你的数据集分成10折。因此,如果您有 1000 行数据,这意味着 900 行将是训练数据集,其余 100 行将是您的测试数据集。因此,您不需要像在train_test_split 中那样设置任何test_size

      【讨论】:

        猜你喜欢
        • 2018-10-15
        • 2017-09-27
        • 2018-09-21
        • 2018-10-24
        • 2018-12-05
        • 2021-03-09
        • 2021-09-01
        • 2019-02-07
        • 2023-03-10
        相关资源
        最近更新 更多