【问题标题】:Cross-validation in sklearn: do I need to call fit() as well as cross_val_score()?sklearn 中的交叉验证:我需要调用 fit() 和 cross_val_score() 吗?
【发布时间】:2018-10-24 01:21:28
【问题描述】:

我想在学习模型时使用 k 折交叉验证。到目前为止,我是这样做的:

# splitting dataset into training and test sets
X_train, X_test, y_train, y_test = train_test_split(dataset_1, df1['label'], test_size=0.25, random_state=4222)

# learning a model
model = MultinomialNB()
model.fit(X_train, y_train)
scores = cross_val_score(model, X_train, y_train, cv=5)

在这一步,我不太确定是否应该使用 model.fit(),因为在 official documentation of sklearn 中它们不适合,而是按如下方式调用 cross_val_score(它们甚至不将数据拆分为训练和测试集):

from sklearn.model_selection import cross_val_score
clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, iris.data, iris.target, cv=5)

我想在学习模型的同时调整模型的超参数。什么是正确的管道?

【问题讨论】:

  • 您不需要拆分为训练+测试,因为这样做是为了评估模型性能。 CV 做的完全一样(性能评估)只是一种更稳健的方式。如果您有更复杂的场景并想要优化超参数或执行其他高级程序,则此评论不适用。

标签: python-3.x scikit-learn cross-validation


【解决方案1】:

如果您想进行超参数选择,请查看RandomizedSearchCVGridSearchCV。如果您以后想使用最佳模型,请使用refit=True 调用其中任何一个,然后使用best_estimator_

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import RandomizedSearchCV

log_params = {'penalty': ['l1', 'l2'], 'C': [1E-7, 1E-6, 1E-6, 1E-4, 1E-3]}
clf = LogisticRegression()
search = RandomizedSearchCV(clf, scoring='average_precision', cv=10,
                            n_iter=10, param_distributions=log_params,
                            refit=True, n_jobs=-1)
search.fit(X_train, y_train)
clf = search.best_estimator_

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html

【讨论】:

    【解决方案2】:

    您的第二个示例适合进行交叉验证。请参阅此处的示例:http://scikit-learn.org/stable/modules/cross_validation.html#computing-cross-validated-metrics

    拟合将在cross_val_score函数内部完成,您无需事先担心。

    [已编辑]如果除了交叉验证之外,您还想训练模型,您可以在之后致电model.fit()

    【讨论】:

    • 但是如果你以后想使用模型,你需要在整个数据上再次fit()
    猜你喜欢
    • 2022-10-04
    • 2017-09-27
    • 2020-05-05
    • 2023-04-01
    • 2012-12-31
    • 2018-08-16
    • 2018-04-26
    • 2021-08-29
    • 1970-01-01
    相关资源
    最近更新 更多