小伙伴们大家好!我是菜鸟君。有空给大家唠唠R语言里的常见模型评价指标。主要想着介绍两大类模型的指标,分类模型、回归模型。今天先说分类的指标,全文没有什么特别烧脑的复杂公式,大家放心看嗷!
首先,放上一个表格,也就是混淆矩阵,这样就能解释明白很多指标了。
| 预测0 |
预测1 |
|
| 实际0 | 84 TN |
9 FP |
| 实际1 |
15 FN |
90 TP |
在这个表格中,有四种情况。例如,有个模型是用来预测患者肺部是否有结节,标签 1:有结节,标签 0:无结节。
(1) 真阳性(True Positive,TP):预测有结节,且实际有结节的有90位患者;正确肯定的匹配数目;
(2) 假阳性(False Positive,FP):预测有结节,但实际无结节的有9位患者;这些是误报,给出的匹配是不正确的;
(3) 真阴性(True Negative,TN):预测无结节,且实际无结节的有84位患者;这是正确拒绝的非匹配数目;
(4) 假阴性(False Negative,FN):预测无结节,但实际有结节的有15位患者;这是漏报,没有识别出来。
了解这四种情况以后,我们接下来计算分类模型的指标:
1.准确率
所有预测正确的样本,除以样本总数。
Accuracy = (TP+TN)/(TN+FN+FP+TP) =(84+90)/(84+90+15+9)
2. 召回率(recall)又叫 敏感度(sensitivity)、真阳性率(TRP)
实际上标签为1的样本中,被准确预测为1的比例。
R=TP/(TP+FN) = 90/(90+15)
3.精确率 (precision)又叫 正确率
预测为1的样本中,实际上标签为1的样本占多少比例。
P=TP/(TP+FP) = 90/(90+9)
4.特异度(Specificity) 又叫 真阴性率(TNR)
实际上标签为0的样本中,被准确预测为0的比例。
Specificity = TN/(TN+FP) = 84/(84+9)
5.ROC曲线
接收者操作特征曲线(receiver operating characteristic curve),是反映敏感性和特异性连续变量的综合指标,线上每个点对应一个阈值。阈值越小,越来越多的样本被划分为标签是1。阈值越大,就越严格,越来越多的样本被判断为0。
ROC曲线中:
横坐标:1-Specificity,伪正类率(False positive rate, FPR),预测为正但实际为负的样本占所有负例样本 的比例;
纵坐标:Sensitivity,真正类率(True positive rate, TPR),预测为正且实际为正的样本占所有正例样本 的比例。
6. AUC
AUC (Area Under Curve) 是ROC曲线下的面积,显然这个面积的数值不会大于1。由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围一般在0.5和1之间。
最后,奉上R语言代码,包括以上的常见指标。衡量自己的分类模型效果时,可以直接套用。
install.packages('caret') #没安装caret包的小伙伴先安一下library(caret)#pre: 模型预测结果#label: 样本实际标签result <- caret::confusionMatrix(as.factor(pre),as.factor(label))result #混淆矩阵以及各项指标


#ROC曲线install.packages('ggplot2')install.packages('ROCR')library(ggplot2)library(ROCR)data(ROCR.simple) #以这个数据为例pred <- prediction(ROCR.simple$predictions, ROCR.simple$labels)perf <- performance(pred,"tpr","fpr")perfx <- unlist(perf@x.values)y <- unlist(perf@y.values)plotdata <- data.frame(x,y)names(plotdata) <- c("x", "y")g <- ggplot(plotdata) +geom_path(aes(x = x, y = y, colour = x), size=1) +labs(x = "False positive rate", y = "True positive rate", title ="ROC Curves") +scale_colour_gradient(name = 'False positive rate', low = 'blue', high = 'red') +theme(plot.title = element_text(face = 'bold',size=15))

这就是今天想跟大家分享的R语言常见分类模型指标。觉得有帮助的小伙伴点个右下角“在看”哦!每天进步一点点,一起加油!

