Machine Learning | (6) Scikit-learn的分类器算法-性能评估

Machine Learning | 机器学习简介


Machine Learning | (1) Scikit-learn与特征工程


Machine Learning | (2) sklearn数据集与机器学习组成


Machine Learning | (3) Scikit-learn的分类器算法-k-近邻


Machine Learning | (4) Scikit-learn的分类器算法-逻辑回归


Machine Learning | (5) Scikit-learn的分类器算法-朴素贝叶斯


Machine Learning | (6) Scikit-learn的分类器算法-性能评估


分类器性能评估

在许多实际问题中,衡量分类器任务的成功程度是通过固定的性能指标来获取。一般最常见使用的是准确率,即预测结果正确的百分比。然而有时候,我们关注的是负样本是否被正确诊断出来。例如,关于肿瘤的的判定,需要更加关心多少恶性肿瘤被正确的诊断出来。也就是说,在二类分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵。


在二类问题中,如果将一个正例判为正例,那么就可以认为产生了一个真正例(True Positive,TP);如果对一个反例正确的判为反例,则认为产生了一个真反例(True Negative,TN)。相应地,两外两种情况则分别称为伪反例(False Negative,FN,也称)和伪正例(False Positive,TP),四种情况如下图:


Machine Learning | (6) Scikit-learn的分类器算法-性能评估

在分类中,当某个类别的重要性高于其他类别时,我们就可以利用上述定义出多个逼错误率更好的新指标。第一个指标就是正确率(Precision),它等于TP/(TP+FP),给出的是预测为正例的样本中占真实结果总数的比例。第二个指标是召回率(Recall)。它等于TP/(TP+FN),给出的是预测为正例的真实正例占所有真实正例的比例。


那么除了正确率和精确率这两个指标之外,为了综合考量召回率和精确率,我们计算这两个指标的调和平均数,得到F1指标(F1 measure):


{F1}={\frac{2}{\frac{1}{Precision}{+}\frac{1}{Recall}}}F1=Precision1+Recall12


之所以使用调和平均数,是因为它除了具备平均功能外,还会对那些召回率和精确率更加接近的模型给予更高的分数;而这也是我们所希望的,因为那些召回率和精确率差距过大的学习模型,往往没有足够的使用价值。


sklearn.metrics.classification_report

sklearn中metrics中提供了计算四个指标的模块,也就是classification_report。

classification_report(y_true, y_pred, labels=None, target_names=None, digits=2)
  """
  计算分类指标
  :param y_true:真实目标值
  :param y_pred:分类器返回的估计值
  :param target_names:可选的,计算与目标类别匹配的结果
  :param digits:格式化输出浮点值的位数
  :return :字符串,三个指标值
  """

我们通过一个例子来分析一下指标的结果:

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
上一篇:NLP之WE之CBOW&Skip-Gram:CBOW&Skip-Gram算法概念相关论文、原理配图、关键步骤之详细攻略


下一篇:python 带参数的多重继承