每个类的cross_val_score返回精度

时间:2019-03-12 23:53:03

标签: python scikit-learn

我希望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’)

Reference

我该怎么办?

1 个答案:

答案 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方法也支持此方法。

注意:您不能返回“每个类别的准确性”,我想您的意思是回想,这基本上是在实际属于一个类别的数据点中正确预测的比例。