我希望 sklearn 函数的 cross_val_score
返回每个类的准确度,而不是所有类的平均准确度。
功能:
sklearn.model_selection.cross_val_score(estimator, X, y=None, groups=None,
scoring=None, cv=’warn’, n_jobs=None, verbose=0, fit_params=None,
pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’)
我该怎么做?
最佳答案
这对于 cross_val_score
是不可能的。您建议的方法意味着 cross_val_score
必须返回一个数组。但是,如果您查看源代码,您会发现 cross_val_score
的输出必须是:
Returns ------- scores : array of float, shape=(len(list(cv)),) Array of scores of the estimator for each run of the cross validation.
因此,cross_val_score
会检查您使用的评分方法是否为多指标。如果是,它会抛出如下错误:
ValueError: scoring must return a number, got ... instead
编辑:
就像上面的评论正确指出的那样,您的另一种选择是改用 cross_validate
。以下是它在 Iris 数据集上的工作方式:
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_validate
from sklearn.metrics import make_scorer
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import recall_score
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
scoring = {'recall0': make_scorer(recall_score, average = None, labels = [0]),
'recall1': make_scorer(recall_score, average = None, labels = [1]),
'recall2': make_scorer(recall_score, average = None, labels = [2])}
cross_validate(DecisionTreeClassifier(),X,y, scoring = scoring, cv = 5, return_train_score = False)
请注意,GridSearchCV
方法也支持这一点。
注意:您不能返回“每个类别的准确度”,我猜您的意思是召回率,这基本上是实际属于某个类别的数据点中正确预测的比例。
关于python - cross_val_score 返回每个类的准确度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55132382/