zoukankan      html  css  js  c++  java
  • 二分类算法评估指标

    我们都知道机器学习要建模,但是对于模型性能的好坏我们并不知道是怎样的,很可能这个模型就是一个差的模型,对测试集不能很好的预测。那么如何知道这个模型是好是坏呢?必须有个评判的标准,需要用某个指标来衡量,这就是性能度量的意义。有了一个指标,就可以对比不同模型了,从而知道哪个模型更好,或者通过这个指标来调参优化选用的模型。
     
    对于分类、回归、聚类等,分别有各自的评判标准。本篇主要介绍二分类算法(多分类可以扩展转化成二分类)的相关指标。评估一个二分类的分类器的性能指标有:准确率、查准率、查全率、F1值、AUC/ROC。前面几个比较直观,AUC/ROC相对抽象一点。经常会以AUC/ROC为代表来考察对分类算法指标的认知程度:什么是AUC/ROC?横轴纵轴都代表什么?有什么优点?为什么要使用它?不是因为它的复杂度更高,主要是它对项目场景的衡量更贴切。
     
     
    背景介绍-混淆矩阵与常规定义
    对于二分类模型,预测情况与实际情况会得出2*2=4种组合,形成混淆矩阵:
     预测正例   预测反例
     实际正例     TP: True Positive        FN: False Negative
     实际反例     FP: False Positive        TN: True Negative
     
    真正(True  Positive , TP):被模型预测为正的正样本
    假正(False Positive , FP):被模型预测为正的负样本
    假负(False Negative , FN):被模型预测为负的正样本
    真负(True  Negative , TN):被模型预测为负的负样本
     
    真正率(True  Positive Rate,TPR):TPR=TP/(TP+FN),即被预测为正的正样本数 /正样本实际数
    假正率(False Positive Rate,FPR) :FPR=FP/(FP+TN),即被预测为正的负样本数 /负样本实际数
    假负率(False Negative Rate,FNR) :FNR=FN/(TP+FN),即被预测为负的正样本数 /正样本实际数
    真负率(True  Negative Rate,TNR) :TNR=TN/(TN+FP),即被预测为负的负样本数 /负样本实际数
     
     
    性能指标
    准确率(Accuracy):  Accuracy = (TP+TN)/(TP+FN+FP+TN)
    即正确预测的正反例数 /预测总数。准确率是预测正确的结果占总样本的百分比,是很自然就会想到的指标,但很多项目场景都不适用!最主要的原因是样本不平衡。举个简单的例子,比如在一个总样本中,正样本占90%,负样本占10%,样本是严重不平衡的。对于这种情况,我们只需要将全部样本预测为正样本即可得到90%的高准确率,但实际上我们并没有很用心的分类,只是随便无脑一分而已。这就说明了:由于样本不平衡的问题,导致了得到的高准确率结果含有很大的水分。即如果样本不平衡,准确率就会失效。
     
    精确率(Precision): Precision = TP/(TP+FP)
    即正确预测的正例数 /预测正例总数。可理解为查准率。在预测为正的记录中,有多少实际为正?
     
    召回率(Recall): Recall = TP/(TP+FN)
    即正确预测的正例数 /实际正例总数 。可理解为查全率。在实际为正的记录中,有多少预测为正?
     
    F1 score : 2/F1 = 1/Precision + 1/Recall
    精确率和召回率的调和值。由于Precision和Recall是一对不可调和的矛盾,很难同时提高二者,也很难综合评价。故提出F1来试图综合二者,F1是P和R的调和平均。F1更接近于两个数较小的那个,所以精确率和召回率接近时值最大。很多推荐系统会用的评测指标。
     
    ROC曲线: 以假正率FPR为横轴,以真正率TPR为纵轴,绘制的曲线
    FPR表示模型虚报的响应程度,而TPR表示模型预测响应的覆盖程度。我们希望:虚报的越少越好,覆盖的越多越好。总结一下就是FPR越低TPR越高(即ROC曲线越陡),那么模型就越好。ROC曲线无视样本不平衡。
    画曲线的用意是:用假正率与真正率的变化趋势,来观察模型是否能在较低的假正率下得到较高的真正率。
     
    AUC: Area under the ROC curve  
    绘制ROC曲线时,横轴纵轴都是0~1,形成一个1*1的正方形。AUC就是在这个正方形里ROC曲线围成的面积。
    如果连接正方形的对角线,它的面积正好是0.5。对角线的实际含义是:随机判断响应与不响应,正负样本覆盖率都是50%,即AUC =0.5表示随机分类器。AUC < 0.5表示差于随机分类器,没有建模价值;AUC = 1表示完美分类器,不存在;0.5 < AUC < 1,优于随机分类器,大多模型都在这个区间里。
     
    AUC的一般判断标准
    0.5 - 0.7:效果较低,但用于预测股票已经很不错了
    0.7 - 0.85:效果一般
    0.85 - 0.95:效果很好
    0.95 - 1:效果非常好,但基本不太可能
     
     
    场景决定指标
    指标没有单纯的谁比谁好,选择指标还是要结合具体的使用场景。比如:
    嫌疑人定罪:基于不错怪一个好人的原则,有时候放过一些嫌疑人也是值得的。宁漏,不错。
    地震的预测:情愿发出100次警报10次都没漏,也不要发出10次警报对了8次漏了2次。宁错,不漏。
    在地震场景中可以只看Recall=99.99999%(地震全中)时的Precision,其他指标就变得没有了意义。
     
     
    学习参考:
  • 相关阅读:
    C++ 类的多态一(virtual关键字--构造函数深刻理解)
    C++ 类的继承六(多继承的二义性--虚基类)
    C++ 类的继承五(类继承中的static关键字)
    C++ 类的继承四(类继承中的重名成员)
    C++ 类的继承三(继承中的构造与析构)
    C++ 类的继承二(赋值兼容性原则)
    C++ 类的继承一(访问控制)
    C++ 匿名对象产生场景
    WPF/ASP.NET:几个Prism中的术语
    Prism 5 + MEF中的ModuleCatalog.CreateFromXaml问题
  • 原文地址:https://www.cnblogs.com/myshuzhimei/p/11746886.html
Copyright © 2011-2022 走看看