使用sklearn的cross_val_score和kfolds进行拟合和预测模型

23

我正在尝试理解来自sklearn Python模块的kfolds交叉验证。

我理解基本流程:

  • 实例化一个模型,例如model = LogisticRegression()
  • 拟合模型,例如model.fit(xtrain, ytrain)
  • 预测,例如model.predict(ytest)
  • 使用cross_val_score等函数测试拟合模型的准确性。

我感到困惑的是如何使用sklearn kfolds和cross_val_score。据我所知,cross_val_score函数将在kfolds上拟合模型并进行预测,从而为每个fold给出准确度分数。

例如,使用以下代码:

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,因为它基本上就像一个可以拟合和预测的模型,对于调整模型参数非常有用。如果你不想调整任何参数,你可以传递{} - justincai
这个问题,也就是最近的那个,应该被关闭,而不是那个先被问出来并已经关闭的。我真的很讨厌人们在没有任何良好判断力的情况下随意关闭问题。 - user
1个回答

28

不,模型没有被拟合。查看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 将为您提供一个分数数组,您可以分析该数组以了解估算器在不同数据折叠中的表现,以检查它是否过度拟合数据。您可以在此处了解更多
一旦您对cross_val_score的结果感到满意,您需要将整个训练数据拟合到估算器中,然后才能将其用于测试数据的预测。

在使用 cross_val_score 时,有没有获取训练和测试时间的方法? 据我所见,在源代码中,_fit_and_score 返回一个 fit_time 和一个 score_time,但我不确定在使用 cross_val_score 时是否有任何检索这些数据的方法。 - No Reply
1
在使用cross_val_score后,如果我得到了10个fold的分数,如何应用最终的平均模型来对测试数据进行预测?我现在不理解如何得到最终模型。 - Evgeny
2
交叉验证只是为了检查模型在数据分布上的表现。一旦您对此满意,就需要使用全部数据训练一个新模型。 - Vivek Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接