模型评价

一.评价指标

混淆矩阵
  预测
实际   YES NO
YES TP FN
NO FP TN

TP   true positive   判断正确,且实际是YES;

FN false negative 判断错误,且实际是NO;

以此类推。

 

由混淆矩阵引出:

accuracy:(TP+TN)/(TP+FN+FP+TN)  准确率       最常见,且容易想到。

precision:TP/(TP+FP)     精度   预测为YES中实际是YES的概率。

recall=sensitivity: TP/(TP+FN)  查全率   实际为YES能查出来多少,即分类器对正类样本(YES)的识别能力。

specificity:TN/(FP+TN)  分类器对负类样本(NO)的识别能力。 

 

注:

1.评价模型好坏,不仅看accuracy,还要根据实际情况看别的指标,比如预测地震这类正负样本不平衡的情况,应看recall和precision。

 

X地 地震
  预测
实际   YES NO
YES  2 2
NO 4 350

 

recall=2/(2+2)=1/2    实际上发生4次地震,预测出2次。 如果一个专家预测的recall越高,即查全率高。

precision=2/(2+4)=1/3  预测发生6次地震,实际发生2次。如果一个专家预测的precision很小,百姓按照其指示搬离住所,则浪费了不必要的精力。

 

 

二:评价分类器的好坏

在评价分类器的好坏时,即不设定阈值p,可以通过相应指标评价模型的好坏。

举例来说,在应用分类算法比如logistic回归时,我们得到概率p。并人为地设定阈值0.5,大于0.5的是YES,小于0.5的是NO,结合实际结果可得混淆矩阵。但是评价该模型的好坏,不只是在某一特定的阈值,而是当阈值连续变化 p \in(0,1)时,考察相应指标。

1. precision recall曲线  

2. ROC和相应的auc

ROC的纵轴为TPR=recall 越大越好(最大为1)   eg:医生把有病的人尽量揪出来;

横轴为FPR=1-specificity 越小越好(最小为0)。eg:没病的误诊率尽量降低。

所以一个模型取什么样的阈值,可参考当最接近(1,0)的点时的阈值,当然也要根据业务需要。

 

三:相应R代码

 

library(ROCR)
par(mfrow=c(1,2))
pred=prediction(model,label)

pref=performance(pred,'tpr','fpr')
plot(pref,colorize=TRUE,main='ROC曲线图');abline(a=0,b =1,lty=2)


pr=performance(pred,'prec','rec')
plot(pr,colorize=TRUE,main='precision和recall的关系图')

auc <- performance(pred, "auc")
unlist(slot(auc, "y.values"))  #auc 
  

  

posted @ 2016-05-23 21:08  blue_pride  阅读(1039)  评论(0)    收藏  举报