使用 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() 标准化数据