混淆矩阵precision,混淆矩阵模型评估

  混淆矩阵precision,混淆矩阵模型评估

  1混淆矩阵

  混淆矩阵的功能:

  1)用于观察模型在每个类别中的表现,可以计算每个类别对应的模型的准确率和召回率;

  2)通过混淆矩阵,可以观察哪些类别不容易直接区分,比如A类中有多少类别被归入B类,这样就可以做出有针对性的设计特征,类别也可以更加区分;

  2 ROC

  ROC曲线的横坐标是假阳性率(FPR),纵坐标是真阳性率(TPR)。

  3 AUC AUC(曲线下面积)定义为ROC曲线下的面积,这个面积的值不会大于1。因为ROC曲线一般在直线y=x上方,所以AUC的取值范围在0.5-1之间。用AUC值作为评价标准是因为ROC曲线在很多情况下不能明确说明哪个分类器效果更好,而作为数值,AUC较大的分类器效果更好。为什么?因为ROC曲线越靠近左上角,AUC面积越大,分类器性能越好。

  理解auc指数的含义机器学习实践中分类器常用的评价指数是auc。如果不想理解,简单用一句就记住一句。

  auc值的范围是[0.5,1]。AUC值越大越好。如果AUC值小于0.5,结果将相反。

  如果你想了解,请阅读论文《Roc分析导论》(汤姆福塞特)。我整理了这篇论文的要点。

  介绍

  假设有以下两个量词,哪个比较好?

  测试中有90个A类样本和10个B类样本。

  分类器C1将所有测试样本分类为A类(例如,分类器的输出只是代码printf (A )),

  分类器C2将类别A的90个样本分成70对,类别B的10个样本分成5对。

  那么C1的分类准确率是90%,C2是75%,但是直观上我们觉得C2更有用。

  我们需要一个评价指标,既能客观反映正样本和负样本的综合预测能力,又要考虑消除样本倾斜的影响(实际上归一化的思想在实践中很重要,比如pv永远远大于click)。这是auc指数可以解决的问题。

  什么是auc

  roc曲线下的面积是auc,所以要先搞清楚roc。

  先看第二个分类问题。预测值和实际值有四种组合。请参见下面的应急表。

  让我们:

  纵坐标是真正率(TPR)=TP/(TP FN=P)(分母是横线之和)。直观解释:其实是1。你猜多少?

  横坐标是假阳性率(FPR)=FP/(FP TN=n)。直观解释:其实是0。猜错了多少?

  所以评价标准改为靠近左上角的,是好的分类器。(考虑正负样本的综合分类能力)

  如果一个分类器可以输出分数,调整分类器的阈值,在图上画出对应的点,连接成一条线。这条线是roc,曲线下面积是AUC(ROC的曲线下面积)。

  有什么特点?

  1 ROC上的点,越靠近左上角越好。(TP率较高,FP率较低,或者两者都有)2 y=x这条对角线代表随机猜测的结果。比如用抛硬币的结果猜,点是(0.5,0.5);假设硬币不平,有90%的概率向上,即(0.9,0.9)(正例中,90%能猜对;反例中90%猜错)3 auc范围[0.5,1],小于0.5的分类器反转结果。4分类器不一定要输出概率,也可以输出可比分数。5绘制roc曲线时,阈值采样点是有限个离散点。其实分数是用的。毕竟分数是有限的。从有限的实例集生成的任何ROC曲线实际上都是阶梯函数。画一条曲线需要两个值TP/P和FP/N。p和N可以先扫描查出来,后面不会变。把分数从上到下按顺序排列,作为threshold。如果TP类是P,加一,如果FP类是N,加一。就变得很简单了。

  这里有一个细节问题。分数相同点怎么处理?

  本文给出了一个直观的图,图中先累加正样本和负样本的差值(加TP先上或加FP后右)。结论是得分相同的样本a

  6.皇家对空观察队曲线下的面积的直观含义是任意取一个正样本和负样本,正样本得分大于负样本的概率皇家对空观察队曲线显示了分类器相对于负面实例对正面实例进行排序的能力,并且在这种能力上它确实是完美的。(想想这个组合问题的概率怎么求?对每一个负样本,把分数大于这个负样本的正样本个数累加起来,最后除以总的组合数P*N,前面算受试者工作特征曲线是不是也类似这样累加?除了P或者普通先除了。还不确定看下面的代码实现,代码里为了平滑,求的是小梯形的面积,而不是矩形,稍微有些差别。)论文里举了个例子,auc算出来是1,但是可以发现预测结果不是完全对的(7和8就预测错了)。但实际上只是阈值选择得不好而已,阈值选0.7这里就行了。

  七容忍样本倾斜的能力皇家对空观察队曲线有一个吸引人的特性:它们对阶级分布的变化不敏感。看看公式TP/P和FP/N本身就包含了归一化的思想(上面的表格每一行乘以常数c,TPR和定期用量法(固定期限要求)不变的),比如负样本*10的话:FPR=(FP*10)/(N*10),不变的。再看看精确和召回就不行了,因为一个表格里是竖行,一个是横行。

  精度=tp/(tp fp),召回率=tp/(tp fn)

  负样本*10的话:

  精度=tp/(tp fp*10),召回率=tp/(tp fn)

  具体代码实现求一个个小的梯形的面积。

  搞到一个scoreKDD.py的代码

  #!/usr/local/bin/python def score AUC(labels,probs):I _ sorted=sorted(range(len(probs)),key=lambda i: probs[i],reverse=True)AUC _ temp=0.0 TP _ pre=0.0 FP=0.0 FP _ pre=0.0 P=0;n=0;last _ prob=probs[I _ sorted[0]]1.0 for I in range(len(probs)):if last _ prob!=probs[I _ sorted[I]]:AUC _ temp=(TP _ TP _ pre)*(FP-FP _ pre)/2.0 TP _ pre=TP FP _ pre=FP last _ prob=probs[I _ sorted[I]]=1:TP=TP 1 else:FP=FP 1 AUC _ temp=(TP TP TP TP _ pre)*(FP-FP _ pre)/2.0 AUC=AUC _ temp/(TP * FP)return AUC defsplit()try:label=int[line附加(标签)问题。append(prob)return(labels,probs)def main():import sys if len(sys .argv)!=2:print(用法:python评分KDD。py file’)sys。exit(2)labels,probs=read _ file(sys。argv[1])AUC=score AUC(labels,probs)print( % f % AUC)if _ _ name _ _= _ _ main _ _ :main()

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: