Python 为什么cross_val_分数返回多个分数?

Python 为什么cross_val_分数返回多个分数?,python,machine-learning,decision-tree,Python,Machine Learning,Decision Tree,我有以下代码 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 ] 我只期望一个数字作

我有以下代码

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(…)
功能,效果很好。Decisiontree分类器似乎也具有此功能,但当我尝试使用它时,会出现如下错误:

trainScore=score(trainData, trainPrediction)
我得到的错误是:
TypeError:'numpy.float64'对象不可调用

文档显示了这个
分数(X,y[,样本重量])
,但我想我真的不明白这一点

我之所以使用交叉评分(…)是因为他们在DecisionTree的文档中使用了它:

我还尝试使用:accurity_score(…),如本例所示:

但这不起作用,因为此函数不属于此分类器

提供交叉验证评估的分数,这意味着它使用K倍交叉验证来拟合和预测输入数据。因此,结果是由每个褶皱产生的
k
分数数组。您有一个
5
值的数组,因为
cv
默认为该值,但您可以将其修改为其他值

以下是使用iris数据集的示例:

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_测试
y_测试

,因此,以cv=3为例,我们将数据分为3部分,使用2部分进行训练,最后一部分用于测试,对吗?但是,数组中的3个值与准确度得分对应的是什么?这是否意味着我们只需分别测试每个分割数据的准确性,并获得每个分割数据部分的这3个分数?是的。在每次折叠中,我们都会留下一小部分数据进行预测。经过3次折叠,我们有3个分数,每个@user1960836都有一个