- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想评估一个使用交叉验证的 scikitlearn 构建的回归模型,我很困惑,我应该使用 cross_val_score
和 cross_val_predict
这两个函数中的哪一个。一种选择是:
cvs = DecisionTreeRegressor(max_depth = depth)
scores = cross_val_score(cvs, predictors, target, cv=cvfolds, scoring='r2')
print("R2-Score: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
另一个,使用标准 r2_score
的 cv 预测:
cvp = DecisionTreeRegressor(max_depth = depth)
predictions = cross_val_predict(cvp, predictors, target, cv=cvfolds)
print ("CV R^2-Score: {}".format(r2_score(df[target], predictions_cv)))
我会假设这两种方法都是有效的并且给出相似的结果。但这只是小 k 折的情况。虽然 r^2 对于 10-fold-cv 大致相同,但在使用“cross_vall_score”的第一个版本的情况下,对于更高的 k 值,它变得越来越低。第二个版本基本上不受折叠次数变化的影响。
这种行为是预料之中的吗?我对 SKLearn 中的 CV 缺乏了解吗?
最佳答案
cross_val_score
返回测试折叠的分数,其中 cross_val_predict
返回测试折叠的预测 y 值。
对于 cross_val_score()
,您使用的是输出的平均值,这将受到折叠次数的影响,因为它可能会有一些折叠,这可能会有很高的错误(不正确拟合) ).
然而,对于输入中的每个元素,cross_val_predict()
返回该元素在测试集中时获得的预测。 [请注意,只能使用将所有元素分配给测试集一次的交叉验证策略]。所以折叠次数的增加,只是增加了测试元素的训练数据,对其结果可能影响不大。
编辑(评论后)
请查看以下有关 cross_val_predict
工作原理的答案:
How is scikit-learn cross_val_predict accuracy score calculated?
我认为 cross_val_predict
会过拟合,因为随着折叠数的增加,更多的数据将用于训练,而更少的数据将用于测试。所以得到的标签更依赖于训练数据。同样如上所述,对一个样本的预测只进行一次,因此它可能更容易受到数据拆分的影响。这就是为什么大多数地方或教程都推荐使用 cross_val_score
进行分析。
关于python - cross_val_score 和 cross_val_predict 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43613443/
我对在测试数据集中使用 cross_val_predict 感到困惑。 我创建了一个简单的随机森林模型并使用 cross_val_predict 进行预测: from sklearn.ensemble
我有大约 10,000 条推文样本,我想将它们分类为“相关”和“不相关”类别。我正在为此模型使用 Python 的 scikit-learn。我手动将 1,000 条推文编码为“相关”或“不相关”。然
当我使用交叉验证训练 SVC 时, y_pred = cross_val_predict(svc, X, y, cv=5, method='predict') cross_val_predict 为
我正在使用 sklearn 的 cross_val_predict 进行训练: myprobs_train = cross_val_predict(LogisticRegression(),X =
在sklearn.model_selection.cross_val_predict page据称: Generate cross-validated estimates for each input
我正在尝试将 0.18.1 版 sklearn 中的 TimeSeriesSplit 交叉验证策略与 LogisticRegression 估计器一起使用。我收到一条错误消息: cross_val_p
我正在努力研究如何在 sklearn 中实现 TimeSeriesSplit。 下面链接中的建议答案会产生相同的 ValueError。 sklearn TimeSeriesSplit cross_v
我想评估一个使用交叉验证的 scikitlearn 构建的回归模型,我很困惑,我应该使用 cross_val_score 和 cross_val_predict 这两个函数中的哪一个。一种选择是: c
cross_val_predict(参见 doc,v0.18)是否使用如下代码所示的 k-fold 方法计算每个折叠的准确度并最终平均它们或不? cv = KFold(len(labels), n_f
使用 cross_val_score 计算的指标与从 cross_val_predict 计算的相同指标有何不同(用于获取然后提供给指标函数的预测)? 这是一个例子: from sklearn imp
在 Jupyter 笔记本上本地运行并使用 MNIST 数据集(28k 条目,每个图像 28x28 像素,以下需要27 秒。 from sklearn.neighbors import KNeighb
如何从合适的 GridSearchCV 中提取最佳管道,以便将其传递给 cross_val_predict? 直接传递适合的GridSearchCV对象导致cross_val_predict再次运行整
我在处理数据严重不平衡的 sklearn ML 案例时遇到了这个问题。下面的行提供了从混淆指标和精确记忆角度评估模型的基础,但是......它是一种训练/预测组合方法: y_pred = model_
我需要训练 Random Forest classifier使用 3 折交叉验证。对于每个样本,我需要检索它恰好在测试集中时的预测概率。 我使用的是 scikit-learn 版本 0.18.dev0
我是一名优秀的程序员,十分优秀!