首页 > 其他分享 >R语言逻辑回归、决策树、随机森林、神经网络预测患者心脏病数据混淆矩阵可视化

R语言逻辑回归、决策树、随机森林、神经网络预测患者心脏病数据混淆矩阵可视化

时间:2024-03-12 17:33:06浏览次数:34  
标签:... aes target ggplot heartDiseaseData 神经网络 可视化 fill 决策树

全文链接:https://tecdat.cn/?p=33760

原文出处:拓端数据部落公众号

概述:

众所周知,心脏疾病是目前全球最主要的死因。开发一个能够预测患者心脏疾病存在的计算系统将显著降低死亡率并大幅降低医疗保健成本。机器学习在全球许多领域中被广泛应用,尤其在医疗行业中越来越受欢迎。机器学习可以在预测关键疾病(例如心脏病)的存在或不存在方面发挥重要作用。

如果能提前准确预测这些信息,可以为医生提供重要见解,从而能够相应并有效地进行患者治疗。以下演示了对流行的心脏疾病数据库进行的探索性数据分析。除此之外,还使用不同方法(如逻辑回归、随机森林和神经网络)进行心脏病预测。

数据集:数据集包含76个属性,但建议我们只使用其中的14个进行分析。在本文中,使用一个合并的数据集构建分类器,并使用交叉验证技术进行性能评估。

特征:

  1. Age:年龄(以年为单位)。
  2. Gender:性别,1表示男性,0表示女性。
  3. Cp:胸痛类型,取值1:典型心绞痛,取值2:非典型心绞痛,取值3:非心绞痛疼痛,取值4:无症状。
  4. Trestbps:静息血压(以毫米汞柱为单位)。
  5. Chol:血清胆固醇(以毫克/分升为单位)。
  6. Fbs:空腹血糖 > 120 mg/dl,1表示真,0表示假。
  7. Restecg:静息心电图结果,取值0:正常,取值1:ST-T波异常,取值2:根据Estes标准显示可能或明确的左室肥厚。
  8. Thalach:达到的最高心率(每分钟心跳数)。
  9. Exang:运动诱发心绞痛,1表示是,0表示否。
  10. Oldpeak:相对于休息引起的ST段压低。
  11. Slope:峰值运动ST段的斜率,取值1:上坡,取值2:平坦,取值3:下坡。
  12. Ca:血管数量(0-3)。
  13. Thal:3 = 正常;6 = 固定缺陷;7 = 可逆性缺陷。
  14. Target:两个类别,因此是一个二分类问题。

目标:预测一个人是否患有心脏疾病。

读取数据集并检查是否有缺失值

   

head(heartDiseaseData)

image.png

   
sum(is.na(heartDiseaseData))
   
## [1] 0
   
colnames(heartDiseaseData)[1]<-"age"
str(heartDiseaseData)

image.png

数据预处理

   

heartDiseaseData$cp<-as.factor(heartDiseaseData$cp)
levels(heartDiseaseData$cp)[levels(heartDiseaseData$cp)==0] <- "Chest Pain Type 0"
levels(heartDiseaseData$cp)[levels(heartDiseaseData$cp)==1] <- "Chest Pain Type 1"
levels(heartDiseaseData$cp)[levels(heartDiseaseData$cp)==2] <- "Chest Pain Type 2"
levels(heartDiseaseData$cp)[levels(heartDiseaseData$cp)==3] <- "Chest Pain Type 3"
...

image.png

检查缺失值

   
sum(is.na(heartDiseaseData))
   
## [1] 0

数据摘要

   
summary(heartDiseaseData)

image.png

健康人和心脏病患者的观测总数。

   
ggplot(heartDiseaseData,aes(t...

image.png

女性心脏病的发病率高于男性

   
ggplot(heartDiseaseData,aes(target, fill=target)) +
...

image.png

可以观察到,健康人和患有心脏病的人的 Rest ECG 分布没有明显差异。

   
ggplot(heartDiseaseData,aes(trestbps, fill=target)) + 
  geom_histogram(aes(y=..density..),breaks=seq(90, 200, by=10), ...

image.png

可以观察到心脏病在各个年龄段均匀分布。此外,患者的中位年龄为56岁,最年轻和最年长的患者分别为29岁和77岁。可以从图表中观察到,患有心脏病的人的中位年龄小于健康人。此外,患心脏病的患者的分布略微倾斜。因此,我们可以将年龄作为一个预测特征。

   
ggplot(heartDiseaseData,aes(age, fill=target)) + ...

image.png

   
ggplot(heartDiseaseData,aes(x=target, y=age, fill=target)) + 
...

image.png

此外,患有心脏病的人通常具有比健康人更高的最高心率。

   
ggplot(heartDiseaseData,aes(thalach, fill=target)) +
...
  ggtitle("Max Heart Rate Histogram")

image.png

此外,可以观察到大多数患有心脏病的人其血清胆固醇在200-300 mg/dl范围内。

   
ggplot(heartDiseaseData,aes(chol, fill=target)) +
 ...

image.png

大多数心脏病患者的ST段压低为0.1。

   
ggplot(heartDiseaseData,aes(oldpeak, fill=target)) +
  geom_histogram(aes(y=..density..),breaks=seq(0, 7, by=0.1), ...

image.png

大多数拥有0个主要血管的人患有心脏病。

   
ggplot(heartDiseaseData,aes(ca, fill=target)) +
  geom_histogram(aes(y=..density..),breaks=seq(0, 5, by=1), ...

image.png

大多数患有心脏病的人胸痛类型为1或2。

   
ggplot(heartDiseaseData,aes(target, fill=target)) +
...

image.png

空腹血糖没有明显差异。

   
ggplot(heartDiseaseData,aes(target, fill=target)) +
...

image.png

拥有静息心电图异常类型1的人患心脏病的可能性较高。

   
ggplot(heartDiseaseData,aes(target, fill=target)) +
...

image.png

没有运动诱发性心绞痛的人患心脏病的可能性较高。

   
ggplot(heartDiseaseData,aes(target, fill=target)) +
...
  scale_fill_manual(values=c("#97BE11","#DC1E0B"))

image.png

具有最高斜率2的人患心脏病的可能性更高

  R
ggplot(heartDiseaseData, aes(target, fill=target)) +
...
  scale_fill_manual(values=c("#97BE11", "#DC1E0B"))

image.png

具有固定缺陷地中海贫血的人患心脏病的可能性更高

  R
ggplot(heartDiseaseData,aes(target, fill=target)) +
...
  scale_fill_manual(values=c("#97BE11","#DC1E0B"))

image.png

可以观察到仅有少数参数,如胸痛类型、性别、运动诱发心绞痛、血管数量和ST段压低,对结果有显著影响。因此,可以舍弃其他参数。

  R
log <- glm(...

image.png

image.png

显著特征的总结

  R
d <- heartDiseaseDa...

image.png

逻辑回归

  R
log <- glm(...=binomial)
summary(log)

image.png

  R
log.df <- tidy...

观察表明,如果个体患有2型或3型胸痛,患心脏病的可能性更高。随着血管数量、运动诱发心绞痛、ST段压低和男性性别数值的增加,患心脏病的可能性较低。

  R
log.df %>%
  mutate(term=reorder(term,estimate)) %>%
...
  geom_hline(yintercept=0) +
  coord_flip()

image.png

随着ST段压低值的增加,患心脏病的可能性降低。随着血管数量的增加,女性患心脏病的可能性降低,而男性的可能性增加。

逻辑回归

  R
data <- d
set.seed(1237)
train <- sample(nrow(data), .8*nrow(data), replace = FALSE)
...

#调整参数
fitControl <- trainControl(method = "repeatedcv",
      ...
TrainSet$target <- as.factor(TrainSet$target)
  R
gbm.ada.1 <- caret::train(target ~ ., 
                    ...
                          metric="ROC")

gbm.ada.1

image.png

ST段压低是最重要的特征,其次是胸痛类型2等等。

   
varImp(gbm.ada.1)

image.png

   
pred <- predict(gbm.ada.1,ValidSet)
....
res<-caret::confusionMatrix(t...

image.png

混淆矩阵

   
ggplot(data = t.df, aes(x = Var2, y = pred, label=Freq)) +
...
  ggtitle("Logistic Regression")

image.png

随机森林

   
gbm.ada.1 <- caret::train(target ~ ., 
                          ...
                                      metric="ROC")

gbm.ada.1

image.png

变量重要性

   
varImp(gbm.ada.1)

image.png

   
pred <- predict(gbm.ada.1,ValidSet)
...
res<-caret::confusionMatrix(t, positive="Heart Disease")
res

image.png

混淆矩阵

   
ggplot(data = t.df, aes(x = Var1, y = pred, label=Freq)) +
 ...
  ggtitle("Random Forest")

image.png

绘制决策树

   
gbmGrid <-  expand.grid(cp=c(0.01))
fitControl <- trainControl(method = "repeatedcv",
                    ...
                           summaryFunction = twoClassSummary)
d$target<-make.names(d$target)
system.time(gbm.ada.1 <- caret::train(target ~ ., 
                    ...
                                      tuneGrid=gbmGrid))
   
gbm.ada.1

image.png

   
varImp(gbm.ada.1)

image.png

   
rpart.plot(gbm.ada.1$finalModel,   
    ...
           nn=TRUE)

下载 (1).png

神经网络

   
fitControl <- trainControl(method = "repeatedcv",
                      ...
                           summaryFunction = twoClassSummary)
gbm.ada.1 <- caret::train(target ~ ., 
                             ...
                                      metric="ROC")

image.png

   
gbm.ada.1

image.png

变量重要性

   
varImp(gbm.ada.1)

image.png

   
pred <- predict(gbm.ada.1,ValidSet)
...
res<-caret::confusionMa...

image.png

混淆矩阵

混淆矩阵(Confusion Matrix)是用于评估分类模型性能的一种表格。它以四个不同的指标来总结模型对样本的分类结果:真阳性(True Positive, TP)、真阴性(True Negative, TN)、假阳性(False Positive, FP)和假阴性(False Negative, FN)。

   
ggplot(data = t.df, aes(x = Var1, y = pred, label=Freq)) +
...
  ggtitle("Neural Network")

下载.png


out of the shadows- a brighter future for pharma technical development_1209427002_standard_1536x1536.webp

最受欢迎的见解

1.PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯模型和KMEANS聚类用户画像

2.R语言基于树的方法:决策树,随机森林

3.python中使用scikit-learn和pandas决策树

4.机器学习:在SAS中运行随机森林数据分析报告

5.R语言用随机森林和文本挖掘提高航空公司客户满意度

6.机器学习助推快时尚精准销售时间序列

7.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

8.python机器学习:推荐系统实现(以矩阵分解来协同过滤)

9.python中用pytorch机器学习分类预测银行客户流失

标签:...,aes,target,ggplot,heartDiseaseData,神经网络,可视化,fill,决策树
From: https://www.cnblogs.com/tecdat/p/18068831

相关文章

  • 图扑数字孪生楼宇智控可视化平台
    从概念提出到风险评估再到跟踪实施,关于智慧园区规划与建设的探讨从未停止。传统楼宇控制系统的各子系统独立存在并不互通,所有信息交互都依赖于中央控制器,导致系统控制的实时性较差。利用大数据、云计算等智能化技术,让人、物、事、产业、服务和生活产生互联。结合图扑软件数字孪生......
  • R语言拟合线性混合效应模型、固定效应随机效应参数估计可视化生物生长、发育、繁殖影
    全文链接:https://tecdat.cn/?p=35338原文出处:拓端数据部落公众号本文将介绍如何设置工作目录、读取数据、标准化数据、拟合线性混合效应模型、提取随机效应参数、绘制相关性图和Dot-and-Whisker图,以帮助研究人员更好地理解数据并进行有效的数据分析。通过这些步骤,我们可以深入了......
  • 2024新版Axure RP大数据可视化大屏模板68套及通用组件+PSD文件
    AxureRP数据可视化大屏模板及通用组件库2024新版重新制作了这套新的数据可视化大屏模板及通用组件库V2版。新版本相比于V1版内容更加丰富和全面,但依然秉承“敏捷易用”的制作理念,这套作品也同样延续着我们对细节的完美追求,整个设计制作过程我们同样投入了大量的精力。作品制作前......
  • 废水清洁新篇章:可视化过滤技术的崛起
    在环保日益受到重视的今天,废水处理成为了每个企业和个人都绕不开的话题。然而,传统的废水过滤过程往往是一个“黑箱”操作,人们无法直观地看到废水是如何一步步变得清澈的。今天,我们就来聊聊可视化这一创新技术是如何改变了废水处理的传统模式,让清洁过程变得更加透明和可控的。 ......
  • 数据可视化能够怎样为智慧林业服务?
    数据可视化是当下科技发展中的一项重要工具,它在各行各业都展现了强大的应用价值。在智慧林业领域,数据可视化更是发挥了独特的作用,为林业管理和生态保护提供了有效的支持和解决方案。下面我就以可视化从业者的角度,来简单聊聊这个话题。通过数据可视化技术,林业管理者......
  • 深度学习-卷积神经网络-目标检测YOLO-v1详解-54
    目录1.结构3.总结3.训练样本的构造4.损失函数5.训练6.推理6.小结参考:https://www.zhihu.com/tardis/zm/art/46691043?source_id=1005输入一张图片,要求输出其中所包含的对象,以及每个对象的位置(包含该对象的矩形框)RCNN开创性的提出了候选区(RegionProposals)的方法,先从......
  • sqlite 可视化工具SQLite studio
    特点:1.轻量级2.独立性,没有依赖,无需安装3.隔离性全部在一个文件夹系统4.跨平台支持众多操作系统5.多语言接口支持众多编程语言6.安全性事物,通过独占性和共享锁来实现独立事务的处理,多个进程可以在同一个时间内从同一个数据库读取数据,但只有一个可以写入数据所支持的数据类型:......
  • R语言分位数回归、最小二乘回归OLS北京市GDP影响因素可视化分析
    全文链接:http://tecdat.cn/?p=32372原文出处:拓端数据部落公众号对于影响北京市GDP因素分析常用的方法是最小二乘回归。【1】但最小二乘有自身的缺陷,该方法要求较高,例如许多观测数据很难满足全部假设条件。相比普通最小二乘法只能描述协变量对因变量条件均值变化的影响,分位数回......
  • API可视化编排,提高API可复用率
    在数字化时代,API(应用程序编程接口)已成为不同软件应用之间沟通的桥梁。然而,如何高效管理、编排和复用这些API,成为了企业和开发者面临的重要挑战。随着技术的不断进步,RestCloud API可视化编排应运而生,成为提高API复用率、提升开发效率的得力助手。 一、API复用率的挑战在传统的......
  • pandas plot函数:数据可视化的快捷通道
    一般来说,我们先用pandas分析数据,然后用matplotlib之类的可视化库来显示分析结果。而pandas库中有一个强大的工具--plot函数,可以使数据可视化变得简单而高效。1.plot函数简介plot函数是pandas中用于数据可视化的一个重要工具,通过plot函数,可以轻松地将DataFrame或Series对象中的......