模型评价
一.评价指标
| 预测 | |||
| 实际 | 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。
| 预测 | |||
| 实际 | 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

浙公网安备 33010602011771号