首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特征选择+交叉验证,但如何在R中生成ROC曲线

特征选择+交叉验证,但如何在R中生成ROC曲线
EN

Stack Overflow用户
提问于 2013-12-03 08:51:46
回答 1查看 4.5K关注 0票数 1

我被下一个问题困住了。我把我的数据分成10倍。每一次,我使用1倍作为测试集,其余9作为训练集(我做了10次)。在每个训练集上,我进行特征选择(使用chi.squared过滤方法),然后用我的训练集和所选的特性生成一个SVMmodel。

最后,我变成了10个不同的模型(因为特征选择)。但是现在我想用这个滤波方法在R中做一个ROC曲线。我该怎么做?

赛克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-29 13:55:47

如果所有的预测都在相同的范围内,您确实可以存储它们(在执行特性选择时要特别小心.有些方法可能会根据特征的数量产生分数),并利用它们来建立ROC曲线。下面是我为最近的一篇论文使用的代码

代码语言:javascript
复制
library(pROC)
data(aSAH)
k <- 10
n <- dim(aSAH)[1]
indices <- sample(rep(1:k, ceiling(n/k))[1:n])

all.response <- all.predictor <- aucs <- c()
for (i in 1:k) {
  test = aSAH[indices==i,]
  learn = aSAH[indices!=i,]
  model <- glm(as.numeric(outcome)-1 ~ s100b + ndka + as.numeric(wfns), data = learn, family=binomial(link = "logit"))
  model.pred <- predict(model, newdata=test)
  aucs <- c(aucs, roc(test$outcome, model.pred)$auc)
  all.response <- c(all.response, test$outcome)
  all.predictor <- c(all.predictor, model.pred)
}

roc(all.response, all.predictor)
mean(aucs)

roc曲线是由all.responseall.predictor构建的,它们在每一步都被更新。此代码还在auc中的每一步存储AUC以供比较。当样本量足够大时,两者的结果应该是相当相似的,但交叉验证中的小样本可能会导致低估AUC,因为所有数据的中华民国曲线将趋于平滑,而梯形规则则较少低估。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20346568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档