为什么`cross_val_score`返回多个分数?

我有以下代码

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(...)的原因是因为他们在决策树的文档中使用了它:https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html

注意

我也尝试使用:accuracy_score(…) 像这个例子中一样:

决策树分类器的准确性分数

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


回答:

sklearn.model_selection.cross_val_score为您提供了通过交叉验证评估的分数,这意味着它使用K折交叉验证来拟合和预测输入数据。因此,结果是一个包含k个分数的数组,这些分数来自每个折叠。你有一个包含5个值的数组,因为cv默认使用这个值,但你可以修改为其他值。

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

from sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_split, cross_val_scorefrom sklearn.datasets import load_irisX, 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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注