用R语言的ROC评价决策树和神经网络哪个更优

首先介绍一下几个基本概念:
  • 预测值为正例,记为P(Positive)
  • 预测值为反例,记为N(Negative)
  • 预测值与真实值相同,记为T(True)
  • 预测值与真实值相反,记为F(False)
  • TP:预测类别是P(正例),真实类别也是P
  • FP:预测类别是P,真实类别是N(反例)
  • TN:预测类别是N,真实类别也是N
  • FN:预测类别是N,真实类别是P
  • 所以,tpr就是真正例,fpr就是假正例
  • ROC曲线是显示Classification模型真正率假正率之间折中的一种图形化方法。
    解读ROC图的一些概念定义::
    真正(True Positive , TP)被模型预测为正的正样本;
    假负(False Negative , FN)被模型预测为负的正样本;
    假正(False Positive , FP)被模型预测为正的负样本;
    真负(True Negative , TN)被模型预测为负的负样本。
  • 真正率(True Positive Rate , TPR)或灵敏度(sensitivity)
  • TPR = TP /(TP + FN)  (正样本预测结果数 / 正样本实际数)
  • 假负率(False Negative Rate , FNR)
  • FNR = FN /(TP + FN) (被预测为负的正样本结果数 / 正样本实际数 )
  • 假正率(False Positive Rate , FPR)
  • FPR = FP /(FP + TN) (被预测为正的负样本结果数 /负样本实际数)
  • 真负率(True Negative Rate , TNR)或特指度(specificity)
  • TNR = TN /(TN + FP) (负样本预测结果数 / 负样本实际数)

然后用ROCR包画ROC曲线,但是ROCR包画图函数功能比较单一

# 设置工作空间

# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter6/示例程序")
# 读取数据
testData <- read.csv("./data/testData.csv")
# 读取模型,tree.model 和nnet.model分别是已建立的决策树和神经网络的模型
load("./tmp/tree.model.RData")

load("./tmp/nnet.model.RData")

library(ROCR)  # 加载ROCR包


# 画出神经网络模型的ROC曲线

nnet.pred <- prediction(predict(nnet.model, testData), testData$class)#括号内是预测分类结果和实际分类结果

 
  
performance(nnet.pred ,'auc')@y.values #AUC值,ROC曲线下面积为AUC,用来评价分类器的综合性能,该数值取0-1之间,越大越好。 nnet.perf <- performance(nnet.pred, "tpr", "fpr") 
或者 nnet.perf < - performance(nnet.pred,'auc',"tpr","fpr")​
plot(nnet.perf)


# 画出CART决策的ROC曲线
tree.pred <- prediction(predict(tree.model, testData)[, 2], testData$class)
tree.perf <- performance(tree.pred, "tpr", "fpr") 

plot(tree.perf)

用R语言的ROC评价决策树和神经网络哪个更优_第1张图片

接着利用pROC包画出ROC曲线,可以方便在一个图上比较两个分类器,实现两条ROC曲线画在同一个坐标轴内。

library(pROC)
modelroc <- roc(newdata$y,pre) #括号内为实际分类结果和预测分类结果。
plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
     grid.col=c("green", "red"), max.auc.polygon=TRUE,

     auc.polygon.col="skyblue", print.thres=TRUE)

library(pROC)

数据使用包自带数据库

用R语言的ROC评价决策树和神经网络哪个更优_第2张图片

data(aSAH)

roc1 <- plot.roc(aSAH$outcome, aSAH$s100, main="Statistical comparison", percent=TRUE, col="1")

用R语言的ROC评价决策树和神经网络哪个更优_第3张图片

      ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真正率(灵敏度)为纵坐标,假正率(1-特异度)为横坐标绘制的曲线。

roc2 <- lines.roc(aSAH$outcome, aSAH$ndka, percent=TRUE, col="2")

用R语言的ROC评价决策树和神经网络哪个更优_第4张图片

testobj<- roc.test(roc1,roc2)

text(50, 50, labels=paste("p-value =", format.pval(testobj$p.value)), adj=c(0, .5))

legend("bottomright", legend=c("S100B", "NDKA"), col=c("1", "2"), lwd=2)

用R语言的ROC评价决策树和神经网络哪个更优_第5张图片

  然后用ROCR包画ROC曲线,但是ROCR包画图函数功能比较单一

你可能感兴趣的:(R语言)