首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我的ROC图和AUC值看起来很好,而我来自随机森林的混淆矩阵显示该模型不能很好地预测疾病?

为什么我的ROC图和AUC值看起来很好,而我来自随机森林的混淆矩阵显示该模型不能很好地预测疾病?
EN

Stack Overflow用户
提问于 2019-11-20 08:29:35
回答 2查看 1.6K关注 0票数 2

我正在使用R中的包randomForest创建一个模型,将病例分为疾病(1)或无疾病(0):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
classify_BV_100t <- randomForest(bv.disease~., data=RF_input_BV_clean, ntree = 100, localImp = TRUE)

print(classify_BV_100t)

Call:
 randomForest(formula = bv.disease ~ ., data = RF_input_BV_clean,      ntree = 100, localImp = TRUE) 
           Type of random forest: classification
                 Number of trees: 100
No. of variables tried at each split: 53

    OOB estimate of  error rate: 8.04%
Confusion matrix:
    0  1 class.error
0 510  7  0.01353965
1  39 16  0.70909091

我的混淆矩阵表明,该模型对0(无疾病)进行了很好的分类,但对1(疾病)的分类效果很差。

但是当我绘制ROC图的时候,它给人的印象是这个模型很好。

以下是我绘制中华民国的两种不同方式:

  1. (使用https://stats.stackexchange.com/questions/188616/how-can-we-calculate-roc-auc-for-classification-algorithm-such-as-random-forest) 库(PROC) rf.roc<-roc(RF_input_BV_clean$bv.disease,classify_BV_100t$votes,2)图(rf.roc) auc(rf.roc)
  2. (使用如何在R中使用插入符号计算ROC和ROC下的AUC?) 库(ROCR)预测<- as.vector(classify_BV_100t$votes,2) <-预测(预测,RF_input_BV_clean$bv.disease) perf_AUC <- performance( pred," AUC ") #计算AUC值<- perf_AUC@y.values[1] perf_ROC <- performance(pred,"tpr","fpr") #绘制实际的ROC曲线图(perf_ROC,main="ROC图“)文本(0.5,0.5,粘贴(”AUC= ",format(AUC,digits=5 ),(scientific=FALSE))

这些是中华民国第一和第二章的情节:

这两种方法给我的AUC为0.8621593。

有没有人知道为什么随机森林混淆矩阵的结果似乎与中华民国不相符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-20 08:53:10

我不认为你的图谋有什么问题,你对这一差异的评估是正确的。

高的AUC值是一个很高的真实负率的产物。我国考虑的是敏感性,主要是衡量真实的正值和特异性,衡量的是真正的负值。因为您的特异性非常高,该度量有效地携带了较低的模型灵敏度值,这使您的AUC相对较高。是的,这是一个很高的AUC,但正如你所提到的,这个模型只擅长预测负面影响。

我建议计算额外的指标(敏感性,特异性,真阳性率,假阳性率.)并在评估模型时评估所有这些指标的组合。AUC是一个质量度量,但有了额外的度量,它就意味着更多。

票数 6
EN

Stack Overflow用户

发布于 2019-11-20 10:07:05

为了增加@DanCarver的答案,您还可以更改预测结果的截止概率,如01。默认情况下,对于一个两类问题,randomForest中的概率阈值都是0.5 .但是,如果假阴性(对0的错误预测)比假阳性(以及对1的错误预测)代价更高,您可以使用较低的截止概率来预测类1

下面是一个使用BreastCancer数据的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(randomForest)
library(mlbench)
data(BreastCancer)
library(caret)

# Limit data frame to complete cases
d = BreastCancer[complete.cases(BreastCancer),]

# Run random forest model
set.seed(10)
m1 = randomForest(Class ~ Bare.nuclei + Marg.adhesion, data=d)
m1

# Generate data frame of predictions
pred = data.frame(predict(m1, type="prob"), 
                  actual=d$Class, 
                  thresh0.5=predict(m1))

# Add prediction if we set probability threshold of 0.3 (instead of 0.5) 
# for classifying a prediction as "malignant"
pred$thresh0.3 = factor(ifelse(pred$malignant > 0.3, "malignant", "benign"))

# Look at confusion matrix for each probability threshold    
confusionMatrix(pred$thresh0.5, pred$actual)
confusionMatrix(pred$thresh0.3, pred$actual)

下面是confusionMatrix函数输出的一部分。注意,在阈值较低的情况下,我们捕获更多的真阳性(220而不是214),但代价是获得更多的假阳性(28而不是20)。如果假阴性比假阳性代价更高的话,这可能是一个很好的权衡。这篇文章讨论了优化randomForest模型以优化概率阈值的问题。

阈值概率0.5预测恶性

Reference Prediction benign malignant benign 424 25 malignant 20 214

阈值预测恶性的概率0.3

Reference Prediction benign malignant benign 416 19 malignant 28 220

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

https://stackoverflow.com/questions/58959104

复制
相关文章
vue子组件传值给父组件_子组件调用父组件中的方法
大家好,又见面了,我是你们的朋友全栈君。 参考视频 : https://www.bilibili.com/video/av32790541/?spm_id_from=trigger_reload 原
全栈程序员站长
2022/10/04
4.2K0
vue子组件传值给父组件_子组件调用父组件中的方法
vue 父组件调用子组件的函数_vue子组件触发父组件方法
项目里将element-ui的el-upload写成公共组件方便调用,官方的before-upload方法用于处理上传前要做的事,如:比较文件大小,限制文件类型等,通过返回true 或 false 控制是否上传。 当该组件调用父组件方法,并且要能获取到父组件方法的返回值,如何实现?
全栈程序员站长
2022/11/10
3K0
vue 父组件调用子组件的方法_vue子组件修改父组件值
我们都知道通过$ref可以获取到某个DOM,但是它也可以用来获取子组件的实例,调用子组件的方法
全栈程序员站长
2022/11/09
2K0
子组件传对象给父组件_react子组件改变父组件的状态
sendData = () => { let data = ‘1234’; this.props.getData(data); //这个this,props.xxx 后面的xxx是是在父组件那使用的名字; }, 然后可以在render函数后使用这个方法或者另外定义一个事件去触发该方法进行传值,
全栈程序员站长
2022/10/04
2.8K0
vue子组件调用父组件函数_vue子组件修改父组件值
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
1.7K0
vue父组件中获取子组件中的数据
<FormItem label="上传头像" prop="image"> <uploadImg :width="150" :height="150" :name="'avatar'" size="150px*150px" ref="avatar"></uploadImg> </FormItem> <FormItem label="上传营业执照" prop="businessLicence"> <uploadImg :width="350" :heigh
蓓蕾心晴
2018/04/12
6.9K0
vue父组件调用子组件属性_vue子组件获取父组件实例
但是在vue3中,很显然使用this.$emit() 已经开始报错了,为什么会报错呢?
全栈程序员站长
2022/11/10
2.1K0
vue 父组件调用子组件_react父组件向子组件传值
1.直接在子组件中通过“this.$parent.event”来调用父组件的方法。
全栈程序员站长
2022/11/15
1.9K0
vue中父组件传值给子组件,父组件值改变,子组件不能重新渲染[通俗易懂]
这个方法感觉props’接收数据在调用方法之后,明明父组件的值已经改变了,但是父组件在调用子组件方法时,数据仍然没有 接收到,调用之后才接收到,这个方法暂且没用,应该是声明ref的时候声明的是当前组件的实例,然后调用时调用的也是值未改变时的属性。这个没什么用,可以用来调用子组件方法。
全栈程序员站长
2022/11/16
3K0
react子组件向父组件传递数据_react子组件改变父组件的状态
本博客代码是 React 父组件和子组件相互传值的 demo;实现封装一个折线图,折线图选择下拉框,获取下拉框点击的值并且传给父组件根据下拉框筛选的条件更新视图;效果图如下:
全栈程序员站长
2022/10/03
3.6K0
react子组件向父组件传递数据_react子组件改变父组件的状态
vue父组件引入子组件_vue子组件传递方法给父组件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1K0
vue父组件操作子组件的方法_vue父组件获取子组件数据
我们经常分不清什么是父组件,什么是子组件。现在来简单总结下:我们将某段代码封装成一个组件,而这个组件又在另一个组件中引入,而引入该封装的组件的文件叫做父组件,被引入的组件叫做子组件。具体代码如下
全栈程序员站长
2022/09/19
7K0
vue父组件操作子组件的方法_vue父组件获取子组件数据
Vuejs中父组件主动调用子组件的方法
我们都知道,vue是单向流,但是有时候我们需要在父组件中主动通知子组件一些信息,使其做出一些响应变化,那么如何在父组件中去主动调用子组件的方法呢?Vue当然给我们提供了方法,如下:
飞奔去旅行
2019/06/13
5K0
react中父组件向子组件传值
子组件中只能使用不能修改父组件传递过来的数据!!!如果非要修改,那就父组件传递一个方法给子组件,子组件使用这个方法来改变父组件中的数据。这就是react的单项数据流(父组件传递给子组件,不可以在子组件中改变)
全栈程序员站长
2022/09/01
2.5K0
vue中父组件向子组件传值
首先在以下案例中,App.vue是父组件,Second-module.vue是子组件。 总体来说,父传子就是这四个步骤:父组件的data中定义值,引入并调用子组件,在引用的子组件的标签上通过v-bind指令给子组件传值,子组件通过在data中定义的props属性接收父组件传过来的值然后应用到子组件里。 首先,值肯定是定义在父组件中的,供所有子组件共享,所以要在父组件的data中定义值:
全栈程序员站长
2022/09/06
1.4K0
vue中父组件向子组件传值
vue中父组件和子组件交互的方式
vue中使用component来表示组件,通过封装组件,我们可以将代码最大程度的复用,可以说组件是vue中的核心。
程序那些事儿
2023/03/07
5.8K0
vue中父组件和子组件交互的方式
angular子组件传值到父组件_vue子组件传值给父组件
step1: D:\vue\untitled2901\src\app\app.component.ts
全栈程序员站长
2022/10/04
2.7K0
react 子组件向父组件传值_vue父组件给子组件传值
父组件给子组件传递数据,直接用属性名传递,子组件通过props获取父组件传递过来的值
全栈程序员站长
2022/10/03
2.8K0
Vue中父组件向子组件传值
Vue中父组件向子组件传值 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../js/vue-2.4.0.js"></script> <style> </style> </head> <body> <div id="app"> <!--父组件可以在引用子组件的时候,通过属性绑定的形式(v-bind
Dream城堡
2018/12/06
1.3K0
vue父组件调用子组件方法返回值_vue子组件修改父组件值
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1.5K0

相似问题

ReactJS:如何访问父组件中的所有子组件?

12

如何从ReactJs中的父组件访问子组件的输入值?

23

ReactJS:访问组件“父”中的组件

23

ReactJS:访问父级中的子组件属性

14

如何从Reactjs中的子组件更新父组件的组件状态

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文