美文网首页
分类问题评价标准及Python实现

分类问题评价标准及Python实现

作者: 术枚派 | 来源:发表于2021-08-16 19:42 被阅读0次

分类问题常见的标准:准确率,精确率,召回率,F1-Score, AUC, ROC曲线, P-R曲线

一、定义

分类结果会出现四种情况。

  • TP:True Positive, 把正类预测为正类
  • FP:False Positive,把负类预测为正类
  • TN:True Negative, 把负类预测为负类
  • FN:False Negative,把正类预测为负类
    这里我们可以这样理解,前一个T代表分类器的判断是正确的,F代表分类器的判断是错误的,后面的P代表分类器判断的结果是正类,N代表分类器判断的结果是负类。
准确度(Accuracy)

代表分类器判断的结果是正类

精确率 (Precision)

精确率是指在预测为正类的样本中真的正类所占的比例。precision=\frac{TP}{(TP+FP)}

召回率(Recall)

召回率又名查全率。指在所有的正类中被预测为正类的比例。
precision=\frac{TP}{(TP+FN)}

F1-Score

精确率和召回率的调和平均。
\frac{2}{F1}=\frac1p +\frac1R
F1=\frac{2P*R}{P+R}

ROC曲线和AUC

TPR:True Positive Rate,真正率, TPR代表能将正例分对的概率。
TPR=\frac{TP}{(TP+FN)}
FPR: False Positive Rate, 假正率, FPR代表将负例错分为正例的概率。
FPR=\frac{FP}{(FP+TN)}
ROC曲线以FPR为横坐标,TPR为纵坐标。


直观的看越靠近左上角,分类器效果越好,越靠近右下角,效果越差。

二、实现

使用sklearn计算上述指标。

1. 准确率
    # 准确率
    import numpy as np
    from sklearn.metrics import accuracy_score
    y_pred = [0, 2, 1, 3,9,9,8,5,8]
    y_true = [0, 1, 2, 3,2,6,3,5,9]
 
    accuracy_score(y_true, y_pred)
    accuracy_score(y_true, y_pred, normalize=False)  # 类似海明距离,每个类别求准确后,再求微平均
2. 召回率
from sklearn import metrics
metrics.recall_score(y_true, y_pred, average='micro')
metrics.recall_score(y_true, y_pred, average='macro')
3. F1-score
metrics.f1_score(y_true, y_pred, average='weighted')  
4. 混淆矩阵

横的是正确的标签,纵的是错误的标签

from sklearn.metrics import confusion_matrix
confusion_matrix(y_true, y_pred)
5. 分类报告
    # 分类报告:precision/recall/fi-score/均值/分类个数
     from sklearn.metrics import classification_report
     y_true = [0, 1, 2, 2, 0]
     y_pred = [0, 0, 2, 2, 0]
     target_names = ['class 0', 'class 1', 'class 2']
     print(classification_report(y_true, y_pred, target_names=target_names))
6. kappa score

kappa score是一个介于(-1, 1)之间的数. score>0.8意味着好的分类;0或更低意味着不好(实际是随机标签)

from sklearn.metrics import cohen_kappa_score
y_true = [2, 0, 2, 2, 0, 1]
y_pred = [0, 0, 2, 2, 0, 2]
cohen_kappa_score(y_true, y_pred)
7. ROC

计算ROC值,获得ROC曲线

import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
roc_auc_score(y_true, y_scores)

#ROC曲线
from sklearn.metrics import roc_curve
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = roc_curve(y, scores, pos_label=2)

官网例子

官网例子
ROC曲线可以进行二分类评价也可以进行多分类评价。在多分类时,需要将标签转换为二分类的标签,可以使用sklearn中的label_binarize方法。
8. 海明距离和Jaccard距离
from sklearn.metrics import hamming_loss
import numpy as np
from sklearn.metrics import jaccard_similarity_score

y_pred = [1, 2, 3, 4]
y_true = [2, 2, 3, 4]
hamming_loss(y_true, y_pred)
jaccard_similarity_score(y_true, y_pred)

三、引用

python + sklearn ︱分类效果评估——acc、recall、F1、ROC、回归、距离
二分类和多分类问题的评价指标总结
python实现二分类和多分类的ROC曲线教程

相关文章

网友评论

      本文标题:分类问题评价标准及Python实现

      本文链接:https://www.haomeiwen.com/subject/bclvbltx.html