cross_val_score 返回每个类别的准确度

use*_*898 4 python scikit-learn

我希望cross_val_scoresklearn 函数返回每个类的准确度,而不是所有类的平均准确度。

\n\n

功能:

\n\n
sklearn.model_selection.cross_val_score(estimator, X, y=None, groups=None,  \n       scoring=None, cv=\xe2\x80\x99warn\xe2\x80\x99, n_jobs=None, verbose=0, fit_params=None, \n       pre_dispatch=\xe2\x80\x982*n_jobs\xe2\x80\x99, error_score=\xe2\x80\x99raise-deprecating\xe2\x80\x99)\n
Run Code Online (Sandbox Code Playgroud)\n\n

参考

\n\n

我该怎么做?

\n

Max*_*Kan 8

这是不可能的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.
Run Code Online (Sandbox Code Playgroud)

因此,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)
Run Code Online (Sandbox Code Playgroud)

请注意,这也得到了GridSearchCV方法论的支持。

注意:您不能返回“每个类别的准确性”,我猜您的意思是召回率,这基本上是实际属于某个类别的数据点之间正确预测的比例。