我有以下代码
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' object is not callable
文档显示了这个score(X, y[, sample_weight])
,但我猜我不太明白
我之所以使用cross_val_score(...)
是因为他们在DecisionTree的文档中使用了它:
https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html
注意
我还尝试使用:precision_score(...),如本例所示:
Accuracy score of a Decision Tree Classifier
但这不起作用,因为此函数不属于此分类器
答案 0 :(得分:1)
sklearn.model_selection.cross_val_score
为您提供通过交叉验证评估的分数,这意味着它使用K折交叉验证来拟合和使用输入数据进行预测。因此,结果是每个折叠产生的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_test
和y_test
。