python - cross_val_score 返回每个类的准确度

标签 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

我该怎么做?

最佳答案

这对于 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/

相关文章:

r - R中二维核密度估计的混淆

python - ZMQ DEALER ROUTER 高频丢消息?

python - 我可以添加单词 python 中的字符串符号吗

python - 如何在元类中自动生成属性?

python - 执行运算符后 Airflow 得到结果

python - 值错误 : bad input shape in sklearn Python

python - 如何保存一个etree xml对象?保存加载 lxml etree 对象问题

machine-learning - 使用 StandartScaler 处理的数据帧可以包含值 >1 或 <-1 吗?

python - 如何使用 sklearn 管道转换项目?

python - scikit-学习管道