zoukankan      html  css  js  c++  java
  • 模型的性能评估(一) 理论篇

    性能评估是用什么样的方法来评估一个模型的预测质量。来对模型的性能进行评价。

    回归问题的评估方法

    能够想到的评估方法是均方误差(mean square error),均方误差又叫做平均损失:

    学习器f,在数据集 $D={(mathbf{x}_1,y_1),(mathbf{x}_2,y_2),…,(mathbf{x}_m,y_m)}$上面的均方误差为  $$E(f;D)= frac{1}{m} sum_{i=1}^{m}{( extbf{x}_i –y_i)}^2$$

    分类问题的评估方法

    很容易想到的是准确率(accuracy)来进行评估  $准确率=frac{分类正确的样本数}{总的样本数}$,这个评估方法简单明了,但是只用这一个方法来进行评估有点太单调。尤其是在类别不平衡的数据集的情况下,准确率往往不能反映出一个分类器的好坏。不同的任务需要的评价方法不一样,在一个推荐系统当中,为了尽量打扰用户,我们更关心我们预测出来的兴趣当中真正被用户喜欢的概率。在预测罪犯的任务当中,我们更关心的是所有犯罪的人当中全部被我们预测出来的概率,这就是两种不同的评估方法,前者叫做precision(查准率),后者叫做recall(查全率、召回率)。

     

    precision和recall

    为了表述分类任务的预测情况,我们需要使用下面的表:

      预测为正 预测为反
    真正为正 TP(真正例) FN(假反例)
    真正为反 FP(假正例) TN(真反例)

    上面的表叫做混淆矩阵,矩阵里面的值的正例和反例是根据预测结果来决定的,预测为正(Positive),那么结果就是正例,和真实结果相符为真正例(TP),和真实结果相反的为假正例(FP)。 同理预测为反(Negative),有假反例(FN)和真反例(TN)。

    在混淆矩阵的基础上我们定义下面两个概念

    precision 预测为正的样本当中有多少预测准确了$P = frac{TP}{TP+FP}$

    recall  真正为正的样本当中有多少被预测出来了  $R = frac{TP}{TP+FN}$

    P-R曲线的绘制

    查准率和查全率是什么关系哪? 假如我们想要提高查全率,那么我们把所有的样本都预测为正,这个时候我们的准确率势必会下降。很多模型在样本预测的时候并不是单纯的得出一个正、负这样的分类值,而是得到一个介于0和1之间的概率值,表示预测为正的概率为多大,然后通过这个数和一个阈值比较(通常为0.5),比这个阈值大的预测为正例,比这个阈值小的预测为反例。

    当我们调整这个阈值的时候,我们预测的结果就会改变,所以,绘制P-R曲线的时候是以这个阈值为自变量,阈值改变的时候,查准率和查全率就会改变,将不同的阈值对应的precision和recall的值绘制到图形上面就形成了P-R曲线图。

    刚开始,阈值很高,这样预测出来的样本当中正例样本很少,但是能保证这些预测为正的样本的确是真正的样本,也就是P值很高。随着阈值的下降,到了极限阈值为0的时候,所有样本都预测为正样本,此时R值最大,即所有为正的样本都被预测出来了。

    绘制出来的P-R曲线的一般是这样的:

    image

    关于P-R图形有这么一个直观的认识:若一个模型的曲线把另外一个模型的曲线包住,那么这个模型的性能要由于另外一个模型。

     提高分类阈值,则假证例的个数会显著减少,真正例的个数会减少或者不变,所以,此时precision会增加,recall会减少。

    $F1$值和$F_{eta}$值 

    单独使用precision和recall的话,那么容易出现一个问题,那就是在有的时候precision和recall这两个值都很高。这个时候可以使用其它的标准,比如上图当中的平衡点,即曲线和y=x曲线的交点。

    还可以使用F1值来进行度量:$F1 = frac{2 imes P imes R}{P+R}$

    $F_{eta}$可以选择我们对于precison的值和recall值的权重$$F_{eta}=frac{1+{eta}^2 imes P imes R}{({eta}^2 imes P)+R}$$

    当$eta$的值为1的时候,为$F_{eta}$变为了$F1$。表示precision和recall的权重是一样的。 当$eta$的值大于1的时候,recall有更大的影响,$eta$小于1的时候,precision的值有更大的影响。

    ROC和AUC

    在混淆矩阵当中还可以定义出来两个变量:

    TPR(True Positive Rate)真正例率 模型正确预测的正样本率   $TPR=frac{TP}{TP+FN}$  其实和recall是一样的

    FPR (False Positive Rate)假正例率 模型错误预测的负样本率  $FPR =frac{FP}{FP+TN}$

    我们以这两个指标来绘制ROC曲线,ROC(Receiver Operating Characteristic) 受试者工作特征曲线。同样,我们的自变量应该是我们的阈值,每得到一个阈值,就有一个TPR和一个FPR与之对应。 当阈值很高的时候,大部分都预测为反例,此时,TPR和FPR都很低。当阈值很高的时候,大部分都预测为正例,此时TPR和FPR都很高。ROC曲线绘制出来的效果如下。

    image

    可以看出ROC曲线和P-R曲线 都是以阈值为自变量,使用不同的指标来绘制出来图形。

    对于ROC曲线来说,下面的面积是AUC(Area Under Roc Curve),面积越大,模型的性能越好。

    为什么要用ROC和AUC哪? 根据这个博客,可以看到当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。

    总结一下: 回归问题的性能度量可以使用均方误差,分类问题的性能度量可以使用 accuracy、precision、recall、F1值、$Feta$值、ROC和AUC。在下一篇模型的性能评估(二) 用sklearn进行模型评估我将介绍如何在sklearn当中对这些方法进行使用。

    参考 周志华 《机器学习》 2.3 性能度量

  • 相关阅读:
    sql server中的孤立用户
    BWOA开源项目引子
    海边拾贝
    ABAP syntax_error 错误: form send_cmplx_data_015 does not exist.
    一点总结,手机应用开发前景
    这个周末发生了很多事
    品味单反
    远图(FarMap)使用
    And和手机随想
    远图(FarMap)花絮
  • 原文地址:https://www.cnblogs.com/jiaxin359/p/8622385.html
Copyright © 2011-2022 走看看