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

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

时间:2024-02-27 23:55:53浏览次数:24  
标签:... 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/18038796

相关文章

  • 3. 了解数据可视化的基础知识
    数据建模和可视化是大规模数据分析解决方案支持的商业智能(BI)工作负载的核心。从本质上讲,数据可视化为报告和决策提供支持,帮助组织取得成功。在本模块中,你将了解分析数据建模和数据可视化的基本原则,使用MicrosoftPowerBI作为平台来在操作中探索这些原则。介绍PowerBI......
  • RNN循环神经网络&LSTM长短期记忆网络&GRU
    个人学习使用,内容来源于网络,侵权删1.基本原理传统网络的结构:RNN的结构:使用场景:语音识别,要按顺序处理每一帧的声音信息,有些结果需要根据上下文进行识别;自然语言处理,要依次读取各个单词,识别某段文字的语义这些场景都有一个特点,就是都与时间序列有关,且输入的序列数......
  • 数据可视化为智慧物流提供了什么帮助?
    在智慧物流的背景下,数据可视化催生了物流管理的全新范式。首先,通过数据可视化,物流企业可以实现对整个供应链的全景式监控。下面我就可以可视化从业者的角度,简单聊聊这个话题。首先,图表和地图的直观展示使决策者能够轻松了解原材料采购、生产、配送和最终消费等环节......
  • 【深度学习】神经网络的学习
    目录常用损失函数均方误差函数(meansquarederror)交叉熵误差函数(crossentropyerror)/对数损失函数(loglossfunction)数值微分(numericalgradient)前向差分(forwarddifference)后向差分(backwarddifference)中心差分(centraldifference)基于梯度下降算法的神经网络学习过程step1.初......
  • Python 机器学习 决策树 数值型特征的处理
    ​ Python机器学习中,特征提取是将原始数据转换为能够被模型有效利用的格式的过程。对于决策树模型而言,特征提取尤其重要,因为好的特征可以显著提升模型的预测性能。在实际应用中,需要根据具体情况选择合适的特征提取方法。数值型特征是机器学习中常见的一种特征类型,它指的是可以......
  • STEP: 用于多变量时间序列预测的预训练增强时空图神经网络《Pre-training Enhanced Sp
    2023年12月27日,看一篇老师给的论文。论文:Pre-trainingEnhancedSpatial-temporalGraphNeuralNetworkforMultivariateTimeSeriesForecasting或者是:Pre-trainingEnhancedSpatial-temporalGraphNeuralNetworkforMultivariateTimeSeriesForecastingGitHub:https:......
  • 神经网络梯度消失原因
    个人学习使用,内容来源于网络,侵权删主要原因就是反向传播链式求导某项小于1(如使用sigmoid激活函数,其求导之后值\(\leq0.25\)),越深层次网络导数连乘越多,从而导致梯度消失,反之某项大于1会导致梯度爆炸,因此初始\(W\)过大会导致梯度爆炸。如图所示,当\(\sigma\)激活函数的值太小,经过......
  • 可视化视频监控云平台EasyCVR使用RTMP_PUSH推流不成功是什么原因?
    高清可视化视频监控云平台EasyCVR支持高清视频的接入和传输、分发,支持7*24小时不间断监控,平台可提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,并具备权限管理、设备管理、鉴权管理、......
  • CNN 卷积神经网络
    个人学习所用,内容来源于网络,侵权删1.CNN定义卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(FeedforwardNeuralNetworks),是深度学习(deeplearning)的代表算法之一,擅长处理图像特别是图像识别等相关机器学习问题。2.卷积C......
  • 数据可视化在智慧仓储中起到了什么作用?
    随着科技的飞速发展,数据可视化已然成为智慧仓储领域的璀璨明珠,其强大的功能和多面的作用让智慧仓储焕发出勃勃生机。让我们一同探索,数据可视化究竟在智慧仓储中起到了怎样的作用。下面我就以可视化从业者的角度来简单谈谈这个话题。在这个信息爆炸的时代,海量的数据如潮水般涌来,要......