前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言实现模型的评估

R语言实现模型的评估

作者头像
一粒沙
发布2021-07-05 15:30:08
1.6K0
发布2021-07-05 15:30:08
举报
文章被收录于专栏:R语言交流中心R语言交流中心
在R语言中构建模型,有很多包进行了模型的封装。那么模型的评估在R中也有对应的包ipred。此包利用了bagging和boosting算法进行对模型的的评估。在这里我们介绍下这两个算法的区别:1)样本选择上:Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的;Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。2)样例权重:Bagging:使用均匀取样,每个样例的权重相等;Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。3)预测函数:Bagging:所有预测函数的权重相等;Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。4)并行计算:Bagging:各个预测函数可以并行生成;Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。当然,bagging在学习算法模型不稳定和受训练模型影响很大的模型有更好的效果。接下来我们看下在这个ipred包中如何运行的。首先看下所需要的包:
代码语言:javascript
复制
install.packages(“ipred”)
install.packages(“MASS”)
install.packages(“rpart”)

接下来通过实例看下运行:

代码语言:javascript
复制
library("ipred")
library("rpart")
library("MASS")
library("survival")
data("GlaucomaM",package="TH.data")
gbag <- bagging(Class ~ ., data = GlaucomaM, coob=TRUE)

在这里的erro打分利用的是Brier分数。它是衡量概率校准的一个参数。简单来说,Brier分数可以被认为是对一组概率预测的“校准”的量度,或者称为“ 成本函数 ”,这一组概率对应的情况必须互斥,并且概率之和必须为1。Brier分数对于一组预测值越低,预测校准越好。例如:如果预测为70%(P = 0.70),并且下雨,则Brier评分为(0.70-1)2= 0.09。接下来看下结果的详细信息:

代码语言:javascript
复制
 #comb进行对模型进行自定义。
comb.lda <-list(list(model=lda, predict=function(obj, newdata) predict(obj, newdata)$x))
mod <-bagging(Class ~ ., data=GlaucomaM, comb=comb.lda)
predict(mod,newdata=GlaucomaM[c(1:3, 99:102), ])

接下来是间接分类模型的构建。所谓间接分类模型,就是将数据集分为三种类型的变量:用于预测类的变量(解释变量)、用于定义类的变量(中间变量)和类成员变量本身(响应变量)。中间变量是在解释变量的基础上建模的,响应变量是在中间变量上定义的。我们直接通过一个实例来看下间接分类模型的评估过程:

代码语言:javascript
复制
data("Smoking",package = "ipred")
classify <-function(data){
  data <- data[,c("TVPS","BPNL", "COHB")]
  res <- t(t(data) > c(4438, 232.5, 58))
  res <- as.factor(ifelse(apply(res, 1, sum)> 2, 1, 0))
  res
}
 
response <-classify(Smoking[ ,c("TVPS", "BPNL", "COHB")])
smoking <-data.frame(Smoking, response)
 
formula <-response~TVPS+BPNL+COHB~TarY+NicY+COY+Sex+Age
 
inclass(formula,data = smoking, pFUN = list(list(model = lm, predict =
mypredict.lm)),cFUN = classify)

最后是错误率评估功能,可以通过预测误差估计值的重新抽样评估生存数据的误分类误差、均方根误差或Brier评分。我们首先看下此功能最重要的参数estimator=c("cv","boot", "632plus")指的是进行评估的几种方法:cv交叉验证;boot基于bootstrap;632plus指的是632+ bootstrap基于偏差校正的bootstrap。接下来直接看实例:

代码语言:javascript
复制
data("iris")
library("MASS")
 
# force predictto return class labels only
mypredict.lda<- function(object, newdata)
  predict(object, newdata = newdata)$class
 
# 10-fold cv ofLDA for Iris data
errorest(Species~ ., data=iris, model=lda,
         estimator = "cv", predict=mypredict.lda)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档