【发布时间】:2016-05-21 00:02:16
【问题描述】:
使用 cross_val_score 计算的指标与从 cross_val_predict 计算的相同指标有何不同(用于获得预测,然后将其提供给指标函数)?
这是一个例子:
from sklearn import cross_validation
from sklearn import datasets
from sklearn import metrics
from sklearn.naive_bayes import GaussianNB
iris = datasets.load_iris()
gnb_clf = GaussianNB()
# compute mean accuracy with cross_val_predict
predicted = cross_validation.cross_val_predict(gnb_clf, iris.data, iris.target, cv=5)
accuracy_cvp = metrics.accuracy_score(iris.target, predicted)
# compute mean accuracy with cross_val_score
score_cvs = cross_validation.cross_val_score(gnb_clf, iris.data, iris.target, cv=5)
accuracy_cvs = score_cvs.mean()
print('Accuracy cvp: %0.8f\nAccuracy cvs: %0.8f' % (accuracy_cvp, accuracy_cvs))
在这种情况下,我们得到相同的结果:
Accuracy cvp: 0.95333333
Accuracy cvs: 0.95333333
尽管如此,情况似乎并非总是如此,正如 on the official documentation 所写的那样(关于使用 cross_val_predict 计算的结果):
请注意,此计算的结果可能会略有不同 从使用 cross_val_score 获得的那些元素被分组 以不同的方式。
【问题讨论】:
-
请添加一个最小的例子来说明这一点。没有这样的例子,恐怕无法回答这个问题。
-
@AmiTavory 完成。感谢您的评论。
-
没问题。但是,您已经回答了自己的问题,不是吗?文档说分组可能不同。也许您应该参加这部分并将其移至答案(在 SO 中回答您自己的问题很好)。
-
@AmiTavory 这是我没有掌握的部分。我已经多次查看该行以及源代码,但我希望看到一个实际示例,其中相同度量的计算会导致不同的结果。例如,我在不同的数据集上计算准确度,这次结果不一致。我想有一个比那行更详尽的解释,也就是说,有一个实际的例子。也许解释会非常简单,但我只是想确保我使用了正确的工具来验证分类器。
-
是的,我也查看了源代码,但看不出它们有何不同。 (FWIW,承诺事情可能会有所不同,与承诺会有所不同。)
标签: python machine-learning scikit-learn metrics cross-validation