为什么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_test
和 y_test
.
我有以下代码
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_test
和 y_test
.