zoukankan      html  css  js  c++  java
  • 评估模型-二分类

      二分类问题的预测结果可能正确,也可能不正确。结果正确存在两种可能:原本对的预测为对,原本错的预测为错;结果错误也存在两种可能:原本对的预测为错,原本错的预测为对。如何评价两个二分类模型的好坏呢?二分类模型的理想状态是什么呢?

      首先回答第二个问题,理想的二分类模型能将原本是对的预测为对,原本是错的预测为错。一般情况下,我们很难收集到完备的“原本是对的,原本是错的”数据集,也就是说,通常情况下我们获得是完备的“原本是对的,原本是错的”数据集的一个子集。因此,评价二分类模型的优劣就是在该子集上进行的。我们希望在该子集上对二分类模型的评价是无偏的,也就是说,在概率上保证在该子集上对二分类模型的评价与在完备集上的评价一致。

      针对第一个问题,其实很简单,数数就行了。数数原本是对的预测为对的个数,原本是错的预测为错的个数,原本是对的预测为错的比例,原本是错的预测为对的比例(评价二分类问题的四个基本元素,后续评价指标都是在此基础上做出的)。

    1、评价指标

    预测值为正例,记为P(Positive)

    预测值为反例,记为N(Negative)

    预测值与真实值相同,记为T(True)

    预测值与真实值相反,记为F(False)

    TP:预测类别是P(正例),真实类别也是P

    FP:预测类别是P,真实类别是N(反例)

    TN:预测类别是N,真实类别也是N

    FN:预测类别是N,真实类别是P

    图1 混淆矩阵

    精度/精确率//查准率(precision的含义是:预测为对的当中,原本为对的比例(越大越好,1为理想状态),TP/(TP+FP)。

    召回率/查全率(recall的含义是:原本为对的当中,预测为对的比例(越大越好,1为理想状态),TP/(TP+FN)。

    灵敏度(sensitive):表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力。sensitive = TP/(TP+FN) = recall

    特效度(specificity):表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力。specificity = TN/(TN+FP)

    F值:F值 = 正确率 * 召回率 * 2 / (正确率 + 召回率) (F 值即为正确率和召回率的调和平均值)

    F-measure:P和R指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure(又称为F-Score)。(越大越好,1为理想状态,此时precision为1,recall为1)。

       F-Measure是Precision和Recall加权调和平均。

      有时候我们对精确率和召回率并不是一视同仁,比如有时候我们更加重视精确率。我们用一个参数α来度量两者之间的关系。如果α>1, 召回率有更大影响,如果α<1,精确率有更大影响。自然,α=1的时候,精确率和召回率影响力相同。

    当参数α=1时,就是最常见的F1,也即

    可知F1综合了P和R的结果,当F1较高时则能说明试验方法比较有效。

    P、R和F1评价在信息检索中用的比较多,在机器学习中还有一种ROC曲线来评价性能。

    注意:准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。一般情况,用不同的阀值,统计出一组不同阀值下的精确率和召回率。如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。所以,在两者都要求高的情况下,可以用F1来衡量。

    准确度/准确率(accuracy:预测对的(包括原本是对预测为对,原本是错的预测为错两种情形)占整个的比例(越大越好,1为理想状态),(TP+TN)/(TP+FN+FP+TN)。

    :准确率是我们最常见的评价指标,而且很容易理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好。 
      准确率确实是一个很好很直观的评价指标,但是有时候准确率高并不能代表一个算法就好。

      比如某个地区某天地震的预测,假设我们有一堆的特征作为地震分类的属性,类别只有两个:0:不发生地震、1:发生地震。一个不加思考的分类器,对每一个测试用例都将类别划分为0,那那么它就可能达到99%的准确率,但真的地震来临时,这个分类器毫无察觉,这个分类带来的损失是巨大的。

      为什么99%的准确率的分类器却不是我们想要的,因为这里数据分布不均衡,类别1的数据太少,完全错分类别1依然可以达到很高的准确率却忽视了我们关注的东西。

      再举个例子说明下。在正负样本不平衡的情况下,准确率这个评价指标有很大的缺陷。比如在互联网广告里面,点击的数量是很少的,一般只有千分之几,如果用acc,即使全部预测成负类(不点击)acc也有 99% 以上,没有意义。因此,单纯靠准确率来评价一个算法模型是远远不够科学全面的。

    错误率(Error rate):错误率则与准确率相反,描述被分类器错分的比例,error rate = (FP+FN)/(TP+TN+FP+FN),对某一个实例来说,分对与分错是互斥事件,所以accuracy =1 - error rate。

    fp rate(False Positive Rate,FPR)的含义是:原本是错的预测为对的比例(越小越好,0为理想状态),FPR=FP/(TN+FP)。

    tp rate(True Positive Rate,TPR的含义是:原本是对的预测为对的比例(越大越好,1为理想状态),TPR = TP/(TP+FN)。 

    特征 (SPC):SPC = TN / (FP + TN) = 1 - FPR

    PPV:PPV = TP / (TP + FP)

    NPV:NPV = TN / (TN + FN)

    FDR:FDR = FP / (FP + TP)

    Matthews相关系数 (MCC) :MCC = (TP*TN - FP*FN) / sqrt(PNP'N'),其中P = TP+FN,N=TN+FP,P'=TP+FP,N'=TN+FN

    截断点:机器学习算法对test样本进行预测后,可以输出各test样本对某个类别的相似度概率。比如t1是P类别的概率为0.3,一般我们认为概率低于0.5,t1就属于类别N。这里的0.5,就是”截断点”。取不同的值,TPR和FPR的计算结果也不同.

    ROC:(fp rate,tp rate)曲线,全称是“受试者工作特征”(Receiver Operating Characteristic),又称为感受性曲线(sensitivity curve)。将截断点不同取值下对应的TPR和FPR结果画于二维坐标系中得到的曲线,就是ROC曲线。横轴用FPR表示。实际中,ROC曲线越凸向左上方效果越好。TPR即为灵敏度(sensitivity),FPR即为(1-特异度(specificity)),因此ROC曲线图有时候也叫做"灵敏度 vs. 1-特异度" 曲线图。

    AUC:全称是Area Under the Curve,ROC曲线下的面积(越大越好,1为理想状态)。AUC用于衡量“二分类问题”机器学习算法性能(泛化能力)。AUC是现在分类模型,特别是二分类模型使用的主要离线评测指标之一。相比于准确率、召回率、F1等指标,AUC有一个独特的优势,就是不关注具体得分,只关注排序结果,这使得它特别适用于排序问题的效果评估,例如推荐排序的评估。AUC这个指标有两种解释方法,一种是传统的“曲线下面积”解释,另一种是关于排序能力的解释。例如0.7的AUC,其含义可以大概理解为:给定一个正样本和一个负样本,在70%的情况下,模型对正样本的打分高于对负样本的打分。可以看出在这个解释下,我们关心的只有正负样本之间的分数高低,而具体的分值则无关紧要。

    PR曲线:(precision,recall)曲线,越凸向右上方效果越好。

    AP:PR曲线下的面积。

    注意:在正负样本差距不大的时候,ROC和PR的趋势是差不多的,但是当负样本很多的时候,两者就截然不同了。ROC效果看似依然很好,但是PR上反映效果一般。打个比方就是1个正例,100个负例,那么tp rate 可能一直维持在100左右,然后突然降到0,但PR曲线就会有较大差异,所以说明PR曲线在正负样本比例悬殊较大时更能反映分类的性能

    ROC优势: 当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。 
    PRC优势: 但当正负样本数量差异极大时,PRC更能有效反映分类器好坏。

    PRC和ROC是两个不同的评价指标和计算方式,一般情况下,检索用前者,分类、识别等用后者。 

    ROC曲线相似时,可用PRC继续鉴定。

    2、评价指标的计算

     

    2.1 PRC的计算

      假设N个样本中有M个positive的正例,那么我们就会得到M个recall值(1/M,2/M,3/M......M/M),对于每个recall值r,我们可以计算出对应r'>r的最大的precision值,然后对这M个precision 值取平均即得到最后的AP值。

      AP是衡量学出来的模型在每个类别上的好坏,mAP是衡量在所有类别上的好坏,得到AP后取所有AP的平均值就是mAP了。

    2.2 ROC的计算

    ROC曲线的作用

    (1)较容易地查出任意界限值时的对类别的识别能力

    (2)选择最佳的诊断界限值。ROC曲线越靠近左上角,试验的准确性就越高。最靠近左上角的ROC曲线的点是错误最少的最好阈值,其假阳性和假阴性的总数最少。

    (3)两种或两种以上不同诊断试验对算法性能的比较。在对同一种算法的两种或两种以上诊断方法进行比较时,可将各试验的ROC曲线绘制到同一坐标中,以直观地鉴别优劣,靠近左上角的ROC曲线所代表的受试者工作最准确。亦可通过分别计算各个试验的ROC曲线下的面积(AUC)进行比较,哪一种试验的AUC最大,则哪一种试验的诊断价值最佳。

      OC曲线是以FPR为横坐标,以TPR为纵坐标,以概率为阈值来度量模型正确识别正实例的比例与模型错误的把负实例识别成正实例的比例之间的权衡,TPR的增加必定以FPR的增加为代价,ROC曲线下方的面积是模型准确率的度量

      所以根据ROC曲线定义可知,绘制ROC要求模型必须能返回监测元组的类预测概率,根据概率对元组排序和定秩,并使正概率较大的在顶部,负概率较大的在底部进行画图

    ROC曲线绘制方法:

    (1)计算所有样本的概率值score(属于正样本的概率);

    (2)将score从高到低排序;

    (3)将每个score当成阈值,计算FPR与TPR;

    (4)当我们将threshold设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点。将这些(FPR,TPR)对连接起来,就得到了ROC曲线。

    由于ROC曲线一般都处于y=x这条直线的上方,所以AUC一般在0~1之间。 

    AUC值越大,正确率越高。 
    0.90-1 = very good (A) 
    0.80-0.90 = good (B) 
    0.70-0.80 = not so good (C) 
    0.60-0.70 = poor (D) 
    0.50-0.60 = fail (F)

     AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。 
    0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。 
    AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。 
    AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测,因此不存在AUC < 0.5的情况

  • 相关阅读:
    ATM
    Python不同目录间模块调用
    Python跨目录调程序
    Python软件目录结构规范
    进程的创建-multiprocessing
    进程
    多任务版udp聊天器
    死锁
    互斥锁
    同步
  • 原文地址:https://www.cnblogs.com/qjoanven/p/8137084.html
Copyright © 2011-2022 走看看