为什么cross_val_scorereturn好几分?

Why does cross_val_score return several scores?

我有以下代码

tree = DecisionTreeClassifier(max_depth=4, random_state=0)
trainPrediction=tree.predict(trainData)
score=cross_val_score(tree, trainData, trainPrediction)

使用上面的代码,我得到的分数如下所示:

[0.96052632 0.93421053 0.89473684 0.94736842 0.92      ]

我原以为只有一个数字作为分数,而不是一个数组。这段代码怎么读,哪一个算得分?

我尝试过的其他一些分类器(如 SVM)具有 score(...) 功能,效果很好。决策树分类器似乎也有这个功能,但是当我尝试使用它时出现错误:

trainScore=score(trainData, trainPrediction)

我得到的错误是:TypeError: 'numpy.float64' object is not callable

文档显示了这一点 score(X, y[, sample_weight]) 但我猜我不太明白这一点

我之所以使用 cross_val_score(...) 是因为他们在 DecisionTree 的文档中使用了它: https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html

备注

我也尝试使用:accuracy_score(...) 就像在这个例子中:

Accuracy score of a Decision Tree Classifier

但这不起作用,因为这个函数不是这个分类器的一部分

sklearn.model_selection.cross_val_score 给出交叉验证评估的分数,这意味着它使用 K-fold 交叉验证来使用输入数据进行拟合和预测。因此,结果是 k 分数的数组,由每个折叠产生。您有一个 5 值数组,因为 cv 默认为该值,但您可以将其修改为其他值。

这是一个使用鸢尾花数据集的例子:

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y)

tree = DecisionTreeClassifier(max_depth=4, random_state=0)
cls = tree.fit(X_train, y_train)
y_pred = cls.predict(X_test)

现在使用默认设置:

score = cross_val_score(cls, X_test, y_test)
score
# array([1., 1., 1., 1., 1.])

或三折:

score = cross_val_score(cls, X_test, y_test, cv=3)
score
# array([1., 1., 1.])

另请注意,cross_val_score 期望 X 和目标变量尝试预测, 而不是预测值 。因此你应该喂它 X_testy_test.