【问题标题】:access to numbers in classification_report - sklearn访问分类报告中的数字 - sklearn
【发布时间】:2018-07-03 05:25:30
【问题描述】:

这是sklearnclassification_report的简单示例

from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 2]
y_pred = [0, 0, 2, 2, 1]
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names))
#             precision    recall  f1-score   support
#
#    class 0       0.50      1.00      0.67         1
#    class 1       0.00      0.00      0.00         1
#    class 2       1.00      0.67      0.80         3
#
#avg / total       0.70      0.60      0.61         5

我想访问平均/总行。例如,我想从报告中提取 f1-score,即 0.61。

我怎样才能访问classification_report中的号码?

【问题讨论】:

  • 您对 f1-score 或从分类报告中提取 f1-score 感兴趣吗?
  • @PratikKumar 从分类报告中提取。我还需要其他报告。

标签: python scikit-learn classification


【解决方案1】:

您可以使用precision_recall_fscore_support 一次性获取所有信息

from sklearn.metrics import precision_recall_fscore_support as score
y_true = [0, 1, 2, 2, 2]
y_pred = [0, 0, 2, 2, 1]
precision,recall,fscore,support=score(y_true,y_pred,average='macro')
print 'Precision : {}'.format(precision)
print 'Recall    : {}'.format(recall)
print 'F-score   : {}'.format(fscore)
print 'Support   : {}'.format(support)

这是模块的link

【讨论】:

  • 答案是正确的,但是请注意你使用了错误的参数,因为第一个参数是y_true,第二个应该是y_pred
  • 这也适用于多类数据集吗?
【解决方案2】:

您可以将分类报告输出为dict:

report = classification_report(y_true, y_pred, **output_dict=True** )

然后像普通的python dictionary 一样访问它的单个值。

例如,宏观指标:

macro_precision =  report['macro avg']['precision'] 
macro_recall = report['macro avg']['recall']    
macro_f1 = report['macro avg']['f1-score']

或准确性:

accuracy = report['accuracy']

【讨论】:

    【解决方案3】:

    您可以使用内置分类报告中的 output_dict 参数返回字典:

    classification_report(y_true,y_pred,output_dict=True)

    【讨论】:

      【解决方案4】:

      classification_report 是字符串,所以我建议你使用来自 scikit-learn 的 f1_score

      from sklearn.metrics import f1_score
      y_true = [0, 1, 2, 2, 2]
      y_pred = [0, 0, 2, 2, 1]
      target_names = ['class 0', 'class 1', 'class 2']
      
      print(f1_score(y_true, y_pred, average=None)
      

      输出

      【讨论】:

      • 谢谢。所以没有办法从分类报告中提取?其他报告呢?
      • 也许你可以使用正则表达式来提取这个值。你能说出其他报告的名字吗?
      • 如果您说的是召回率和精度,是的,sklearn 中有诸如recall_score 和precision_score 之类的函数
      猜你喜欢
      • 2019-01-09
      • 2017-03-29
      • 2021-04-28
      • 2017-09-21
      • 2020-05-04
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多