使用 sklearn cross_val_score 和 kfolds 来拟合和帮助预测模型

Posted

技术标签:

【中文标题】使用 sklearn cross_val_score 和 kfolds 来拟合和帮助预测模型【英文标题】:Using sklearn cross_val_score and kfolds to fit and help predict model 【发布时间】:2017-07-04 23:19:34 【问题描述】:

我正在尝试了解如何使用 sklearn python 模块中的 kfolds 交叉验证。

我了解基本流程:

实例化一个模型,例如model = LogisticRegression() 拟合模型,例如model.fit(xtrain, ytrain) 预测例如model.predict(ytest) 使用例如cross val score 以测试拟合模型的准确性。

我感到困惑的是使用带有交叉 val 分数的 sklearn kfolds。据我了解,cross_val_score 函数将拟合模型并预测 kfolds,为您提供每个折叠的准确度分数。

例如使用这样的代码:

kf = KFold(n=data.shape[0], n_folds=5, shuffle=True, random_state=8)
lr = linear_model.LogisticRegression()
accuracies = cross_val_score(lr, X_train,y_train, scoring='accuracy', cv = kf)

因此,如果我有一个包含训练和测试数据的数据集,并且我使用带有 kfolds 的 cross_val_score 函数来确定每个折叠的训练数据上算法的准确性,那么 model 现在是否适合并准备好对测试数据的预测? 所以在上面的例子中使用lr.predict

【问题讨论】:

我不这么认为,但你应该看看GridSearchCV。我几乎总是使用它而不是cross_val_score,因为它基本上就像一个可以拟合和预测的模型,并且对于调整模型的参数很有用。如果不想调任何参数,可以传 这个问题,即最近的问题,应该关闭,而不是首先提出的实际关闭的问题。我真的很讨厌人们在没有任何良好判断力的情况下随意关闭问题。 【参考方案1】:

否,模型未拟合。看着source code for cross_val_score

scores=parallel(delayed(_fit_and_score)(clone(estimator),X,y,scorer,
                                        train,test,verbose,None,fit_params)

如您所见,cross_val_score 在将折叠训练数据拟合到它之前克隆了估计器。 cross_val_score 会给你输出一个分数数组,你可以分析这些分数,以了解估计器对数据的不同折叠的执行情况,以检查它是否过度拟合数据。你可以know more about it here

一旦您对cross_val_score 的结果感到满意,您需要将整个训练数据拟合到估计器,然后才能使用它来预测测试数据。

【讨论】:

使用cross_val_score时有什么方法可以获取训练和测试时间吗?据我在源代码中看到,_fit_and_score 返回一个 fit_time 和一个 score_time 但我不确定在使用 cross_val_score 时是否有任何方法可以检索它们。 cross_val_score 如果我得到10倍的分数,如何应用最终平均模型对测试数据进行预测?我现在不明白如何获得最终模型。 交叉验证只是为了检查模型在数据分布上的表现。一旦您对此感到满意,您将需要使用完整数据训练一个新模型

以上是关于使用 sklearn cross_val_score 和 kfolds 来拟合和帮助预测模型的主要内容,如果未能解决你的问题,请参考以下文章

为啥 xgboost.cv 和 sklearn.cross_val_score 给出不同的结果?

使用joblib在sklearn中重用由cross_val_score拟合的模型

sklearn.model_selection.cross_val_score的score函数公式是啥?

如何使用 sklearn cross_val_score() 标准化数据

使用 sklearn cross_val_score 和 kfolds 来拟合和帮助预测模型

scikit-learn中的cross_val_score函数scoring参数设置