我希望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’)
我该怎么办?
答案 0 :(得分:2)
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:得分必须返回一个数字,得到的是...
就像上面的注释正确指出的那样,一种替代方法是使用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
方法也支持此方法。
注意:您不能返回“每个类别的准确性”,我想您的意思是回想,这基本上是在实际属于一个类别的数据点中正确预测的比例。