R语言笔记之模型评估度量

1.回归模型评估度量

回归模型的表现度量方式:
RMSE:均方误差平方根
校正R^2:对 原始R^2的改进
Cp:在训练集的RSS上加上惩罚
AIC和BIC:基于最大似然值,对参数进行惩罚

2.分类模型评估度量

分类是指对给定观测样本预测其所属类别,而且类别空间已知,它是有监督学习。

> library(dplyr)
> library(randomForest)
> library(caret)
> library(readr)
Warning message:
程辑包‘readr’是用R版本3.4.3 来建造的 
> 
> disease_dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/sim1_da1.csv")
> glimpse(disease_dat)
Observations: 800
Variables: 241
$ Q1.A   <int> 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0...
$ Q1.B   <int> 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1...
$ Q2.A   <int> 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0...
$ Q2.B   <int> 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1...
> set.seed(2016)
> trainIndex=createDataPartition(disease_dat$y,p=0.8,list=F,times=1)
> xTrain=disease_dat[trainIndex,]%>%
+ dplyr::select(-y)
> xTest=disease_dat[-trainIndex,]%>%
+ dplyr::select(-y)
> yTrain=disease_dat$y[trainIndex]%>%as.factor()
> yTest=disease_dat$y[-trainIndex]%>%as.factor()
> train_rf=randomForest(yTrain~.,data=xTrain,mty=trunc(sqrt(ncol(xTrain)-1)),ntree=1000,importance=T)
> yhatprob=predict(train_rf,xTest,"prob")
> set.seed(100)
> car::some(yhatprob)
        0     1
45  0.592 0.408
158 0.455 0.545
255 0.575 0.425
291 0.513 0.487
314 0.620 0.380
392 0.538 0.462
402 0.472 0.528
443 0.542 0.458
462 0.620 0.380
626 0.586 0.414
> yhat=predict(train_rf,xTest)
> car::some(yhat)
206 273 305 348 519 524 525 599 701 780 
  1   0   0   0   0   0   0   0   1   0 
Levels: 0 1
> 

(1)Kappa统计量(一致性检验方法)

> table(yhat,yTest)
    yTest
yhat  0  1
   0 68 56
   1  3 33
   > kt=fmsb::Kappa.test(table(yhat,yTest))
> kt$Result$estimate
[1] 0.3054738
> kt$Judgement
[1] "Fair agreement"

Kappa<0:无一致性
Kappa 0~0.2:略微一致
Kappa 0.2~0.4:轻度一致
Kappa 0.4~0.6:适度一致
Kappa 0.6~0.8:强一致
Kappa 0.8~1.0:几乎完全一致
(2)ROC曲线(和线下面积AUC)

> library(pROC)
> rocCurve=roc(response=yTest,predictor=yhatprob[,2])
> plot(rocCurve,legacy.axes=T)

这里写图片描述
如上图,ROC曲线为通过(0,0)和(1,1)的曲线,完美模型对应的曲线还通过(0,1)点,对应的曲线下面积为1。
完全无效的模型对应的曲线趋近于45度对角线,曲线下面积为0.5.
可以把不同模型结果对应的ROC曲线放一张图中,直观对比模型效果,或者通过曲线下面积(AUC)量化比较模型,对应面积越大的模型越有效。

#得到AUC的估计
> auc(rocCurve)
Area under the curve: 0.8083
#DeLong方法得到的AUC置信区间
> ci.auc(rocCurve)
95% CI: 0.7419-0.8746 (DeLong)

以上即为用R语言得到基于DeLong提出的非参数方法得到的AUC的估计和置信区间
ROC曲线主要针对二分类定义,但之后好几位研究人员将其扩展到了多分类的情况
(3)提升图
即一种对分类结果评估的可视化工具
它以图形的形式表示模型预测与随机预测相比带来的改进

> modelscore=yhatprob[,2]
> randomscore=rnorm(length(yTest))
> labs=c(modelscore="Random Forest",randomscore="Random Number")
> liftCurve=lift(yTest~modelscore+randomscore,class="1",labels=labs)
> xyplot(liftCurve,auto.key=list(columns=2,lines=T,points=F))
> 

这里写图片描述
如上图,横轴是累计样本百分点,纵轴是累计获取的目标类样本百分比

3.模型评估总结

(1)尝试尽可能多的模型
(2)检查模型的稳定性
(3)模型评估选择通常在模型精确度,稳定性和复杂度这三者之间权衡

猜你喜欢

转载自blog.csdn.net/lulujiang1996/article/details/79052428