zoukankan      html  css  js  c++  java
  • 模型评价指标【AUC原理、roc曲线等】

    分类模型评估:

     指标  描述  Scikit-learn函数
     Precision  AUC  from sklearn.metrics import precision_score
     Recall  召回率  from sklearn.metrics import recall_score
     F1  F1值  from sklearn.metrics import f1_score
     Confusion Matrix  混淆矩阵  from sklearn.metrics import confusion_matrix
     ROC  ROC曲线  from sklearn.metrics import confusion_matrix
     AUC  ROC曲线下的面积  from sklearn.metrics import auc

    回归模型评估:

    指标 描述 Scikit-learn函数
    Mean Square Error (MSE, RMSE) 平均方差 from sklearn.metrics import mean_squared_error
    Absolute Error (MAE, RAE) 绝对误差 from sklearn.metrics import mean_absolute_error, median_absolute_error
    R-Squared R平方值 from sklearn.metrics import r2_score

    混淆矩阵

    对于一个二分类的模型,其模型的混淆矩阵是一个2×2的矩阵。如下图所示: 

        Predicted condition Predicted condition
        positive negative
    True condition positive True Positive False Negative
    True condition negative False Positive True Negative

    混淆矩阵比模型的精度的评价指标更能够详细地反映出模型的”好坏”。模型的精度指标,在正负样本数量不均衡的情况下,会出现容易误导的结果

    • True Positive:真正(TP),样本是正的正样本,预测也是正的正样本。
    • False Negative:假负(FN),样本是正的正样本,预测为负的正样本。
    • False Positive:假正(FP),样本是正的负样本,预测为正的负样本。
    • 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(准确率):

    正确预测的正反例数 / 样本的总数。

    准确率是预测正确的结果占总样本的百分比,但很多项目场景不适用!最主要原因是样本不平衡。举个简单例子,一个总样本中,正样本占90%,负样本占10%,样本严重不平衡。这时候如果将全部正样本预测为正样本,即可达到90%的准确率。所以样本不均衡,准确率会失效。

    Precision(精确率):Percision = TP/(TP+FP)

    正确预测的正例数 / 预测正例总数。可理解为查准率。在预测为正的记录中,有多少实际为正?

    召回率:Recall = TP / (TP+FN)

    正确预测的正例数 / 实际正例总数。可理解为查全率。在实际为正的记录中,有多少预测为正?

      

    Recall越高,说明有更多的正类样本被模型预测正确,模型的效果越好。

    F1 score:2/F1 = 1/Precision + 1/Recall

    精确率和召回率的调和值。由于Precision和Recall是一对不可调和的矛盾,很难同时提高二者,故提出F1来试图综合二者,F1是P和R的调和平均。F1更接近于两个数较小的那个,所以精确率和召回率接近时值最大。很多推荐系统会用的评测指标。

    对ROC曲线、AUC的理解

    True Positive Rate(真阳率)、False Positive(伪阳率):

    • [公式]
    • [公式]

    TPRate的意义是所有真实类别为1的样本中,预测类别为1的比例;FPRate的意义是所有真实类别为0的样本中,预测类别为1的比例。

    按照定义,AUC即ROC曲线下的面积,而ROC曲线的横轴是FPRate,纵轴是TPRate,当二者相等时,即y=x,如下图:

     表示的意义是:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的。

    我们希望分类器达到的效果是:对于真实类别为1的样本,分类器预测为1的概率(即TPRate),要大于真实类别为0而预测类别为1的概率(即FPRate),即y>x,因此大部分的ROC曲线长成下面这个样子:

    最理想的情况下,既没有真实类别为1而错分为0的样本——TPRate一直为1,也没有真实类别为0而错分为1的样本——FP rate一直为0,AUC为1,这便是AUC的极大值


    如何得到roc曲线:

    假设采用逻辑回归分类器,其给出针对每个实例为正类的概率,那么通过设定一个阈值如0.6,概率大于等于0.6的为正类,小于0.6的为负类。对应的就可以算出一组(FPR,TPR),在平面中得到对应坐标点。随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。

    step1:假设已经得出一系列样本被划分为正类的概率,然后按照大小排序,下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。
    step2:我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。这样一来,我们一共得到了20组FPR和TPR的值,将它们画在ROC曲线的结果如下图:
    随着样本数量增多,逐渐接近理想ROC曲线。



    AUC计算方式:
    • 面积计算:矩形面积累加,计算复杂,基本不用。
    • 统计正负样本对PK情况:统计一下所有的 M×N(M为正类样本的数目,N为负类样本的数目)个正负样本对中,有多少个组中的正样本的score大于负样本的score。当二元组中正负样本的 score相等的时候,按照0.5计算。然后除以MN。实现这个方法的复杂度为O(n^2)。实际也不会用。
    • rank求取:

    降序rank--> 去掉(正,正)样本对数--> 求取比例

    • 按概率从高到矮排个降序, 对于正样本中score最高的,排序为rank_n, 比它概率小的有M-1个正样本(M为正样本个数), (rank_n- M) 个负样本。
    • 正样本概率第二高的, 排序为rank_n-1, 比它概率小的有M-2个正样本,(rank_n-1 - M + 1) 个 负样本。
    • 以此类推正样本中概率最小的, 排序为rank_1,比它概率小的有0个正样本,rank_1 - 1 个负样本。
    • 总共有MxN个正负样本对(N为负样本个数)。把所有比较中 正样本概率大于负样本概率 的例子都算上, 得到公式 (rank_n - M + rank_n-1 - M + 1 .... + rank_1 - 1) / (MxN) 就是正样本概率大于负样本概率的可能性了。 化简后(因为后面是个等差数列)得:

    其实就是,按正样本score降序排列情况下,负样本pk失败的数目总数占所有样本对的比例。

    AUC的优势:AUC的计算方法同时考虑了分类器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器作出合理的评价。但是AUC of ROC 在正负样本极度倾斜的情况下,也可能是是失真的。这种情况下,AUC of PR-Curve 会更好。参考这篇 paper:Davis, Jesse, and Mark Goadrich. "The relationship between Precision-Recall and ROC curves." Proceedings of the 23rd International Conference on Machine Learning (ICML). ACM, 2006.

    参考:

    https://www.cnblogs.com/keye/p/9367347.html

    https://www.zhihu.com/question/39840928

    https://www.jianshu.com/p/5e12cd6c3ed1 

  • 相关阅读:
    日本最大的汽车品牌:丰田【仅供自己参考】
    读书笔记1
    读书笔记1
    计算机网络笔记1
    ZY凉凉经
    HK凉凉经
    访问一个网站,发生了什么?
    正向代理VS反向代理
    mac下打开hosts文件
    国际手机区号
  • 原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/15463177.html
Copyright © 2011-2022 走看看