前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Caret 出现traning或者Testing 数据集准确度100%

Caret 出现traning或者Testing 数据集准确度100%

作者头像
Jamesjin63
发布2022-11-03 14:56:48
4070
发布2022-11-03 14:56:48
举报
文章被收录于专栏:EpiHubEpiHub

1.问题

在R 使用caret进行机器学习模型构建时候。针对二分类问题,会发现我们的预测值准确度达到100% 即,可以准确对目标进行分类。

image.png

或者在进行logistics回归时候,发现glm方程输出各个变量的p值都是1,z值是0.

image.png

2.原因

出现这样问题的原因是,我们的x变量里面一个或者几个变量是与y分类变量一致。 即,譬如y为Yes(32个),No(108个),那么x是连续性变量,x<3有 32个,大于3的有108个。与y分布保持一致。

3.例子

譬如我们利用mdrrDescr数据,产生一个y。这个y是根据Ms>2.12变量转换来的. 或者再增加一个x,等于Yes的x均值在1.2左右。等于No的x均值在12左右。 这样就使得x与y保持一致。 最后输出,不管怎么切换Training与Testing的比例,准确率均为100%

代码语言:javascript
复制
library(caret)
data(mdrr)
dim(mdrrDescr)
## creat data
df=mdrrDescr %>% dplyr::select(1:10) %>% 
  mutate(y=factor(ifelse(Ms>2.12,"Yes","No"))) %>% as_tibble()
## creat x 
df1=df %>% filter(y=="Yes") %>% mutate(x=rnorm(n(),1.2,0.3))
df2=df %>% filter(y=="No") %>% mutate(x=rnorm(n(),12.2,0.3))

## split data
df=rbind(df1,df2)
samp = createDataPartition(df$Sv, p = 0.80, list = FALSE)
ames_train = df[samp,]
ames_test = df[-samp,]

## model traning
set.seed(12)
myControl= trainControl(method = "cv",
                        number = 10,
                        summaryFunction=prSummary,
                        classProbs=T,
                        savePredictions = T,
                        verboseIter = F) 
## linear regression model
model_lm =train(y~., 
                data=ames_train[,-c(1)] ,
                method = "glm",
                family = "binomial",
                #weights = model_weights,
                trControl = myControl)
## model performance 
confusionMatrix(predict(model_lm,ames_test),ames_test$y)

#importance
varImp(model_lm,scale = F)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.问题
  • 2.原因
  • 3.例子
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档