首页 > 编程语言 >数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病|附代码数据

数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病|附代码数据

时间:2024-04-12 23:02:01浏览次数:28  
标签:语言 模型 Naive 回归 Bayes 数据 我们 决策树

全文链接:http://tecdat.cn/?p=23061

最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。

这个数据集可以追溯到1988年,由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标 "字段是指病人是否有心脏病。它的数值为整数,0=无病,1=有病

数据集信息:

目标:

主要目的是预测给定的人是否有心脏病,借助于几个因素,如年龄、胆固醇水平、胸痛类型等。

我们在这个问题上使用的算法是:

  • 二元逻辑回归
  • Naive Bayes算法
  • 决策树
  • 随机森林

数据集的描述:

该数据有303个观察值和14个变量。每个观察值都包含关于个人的以下信息。

  • 年龄:- 个人的年龄,以年为单位
  • sex:- 性别(1=男性;0=女性)
  • cp - 胸痛类型(1=典型心绞痛;2=非典型心绞痛;3=非心绞痛;4=无症状)。
  • trestbps--静息血压
  • chol - 血清胆固醇,单位:mg/dl
  • fbs - 空腹血糖水平>120 mg/dl(1=真;0=假)
  • restecg - 静息心电图结果(0=正常;1=有ST-T;2=肥大)
  • thalach - 达到的最大心率
  • exang - 运动诱发的心绞痛(1=是;0=否)
  • oldpeak - 相对于静止状态,运动诱发的ST压低
  • slope - 运动时ST段峰值的斜率(1=上斜;2=平坦;3=下斜)
  • ca - 主要血管的数量(0-4),由Flourosopy着色
  • 地中海贫血症--地中海贫血症是一种遗传性血液疾病,会影响身体产生血红蛋白和红细胞的能力。1=正常;2=固定缺陷;3=可逆转缺陷
  • 目标--预测属性--心脏疾病的诊断(血管造影疾病状态)(值0=<50%直径狭窄;值1=>50%直径狭窄)

在Rstudio中加载数据

   
heart<-read.csv("heart.csv",header = T)

header = T意味着给定的数据有自己的标题,或者换句话说,第一个观测值也被考虑用于预测。

   
head(heart)

图片

当我们想查看和检查数据的前六个观察点时,我们使用head函数。

   
tail(heart)

图片

显示的是我们数据中最后面的六个观察点

   
colSums(is.na(heart))

图片

这个函数是用来检查我们的数据是否包含任何NA值。
如果没有发现NA,我们就可以继续前进,否则我们就必须在之前删除NA。

检查我们的数据结构

   
str(heart)

图片

查看我们的数据摘要

   
summary(heart)

图片

通过观察以上的总结,我们可以说以下几点

  • 性别不是连续变量,因为根据我们的描述,它可以是男性或女性。因此,我们必须将性别这个变量名称从整数转换为因子。
  • cp不能成为连续变量,因为它是胸痛的类型。由于它是胸痛的类型,我们必须将变量cp转换为因子。
  • fbs不能是连续变量或整数,因为它显示血糖水平是否低于120mg/dl。
  • restecg是因子,因为它是心电图结果的类型。它不能是整数。所以,我们要把它转换为因子和标签。
  • 根据数据集的描述,exang应该是因子。心绞痛发生或不发生。因此,将该变量转换为因子。
  • 斜率不能是整数,因为它是在心电图中观察到的斜率类型。因此,我们将变量转换为因子。
  • 根据数据集的描述,ca不是整数。因此,我们要将该变量转换为因子。
  • thal不是整数,因为它是地中海贫血的类型。因此,我们将变量转换为因子。
  • 目标是预测变量,告诉我们这个人是否有心脏病。因此,我们将该变量转换为因子,并为其贴上标签。

根据上述考虑,我们对变量做了一些变化

   
#例如
sex<-as.factor(sex)
levels(sex)<-c("Female","Male")

检查上述变化是否执行成功

   
str(heart)

图片

   
summary(heart)

图片

EDA

EDA是探索性数据分析(Exploratory Data Analysis)的缩写,它是一种数据分析的方法/哲学,采用各种技术(主要是图形技术)来深入了解数据集。

对于图形表示,我们需要库 "ggplot2"

   
library(ggplot2)
ggplot(heart,aes(x=age,fill=target,color=target)) + geom_histogram(binwidth = 1,color="black") + labs(x = "Age",y = "Frequency", title = "Heart Disease w.r.t. Age")

图片

我们可以得出结论,与60岁以上的人相比,40至60岁的人患心脏病的概率最高。

   
table <- table(cp)

pie(table)

图片

我们可以得出结论,在所有类型的胸痛中,在个人身上观察到的大多数是典型的胸痛类型,然后是非心绞痛。


点击标题查阅往期内容

图片

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

图片

左右滑动查看更多

图片

01

图片

02

图片

03

图片

04

图片

执行机器学习算法

Logistic回归

首先,我们将数据集分为训练数据(75%)和测试数据(25%)。

   
set.seed(100) 
#100用于控制抽样的permutation为100. 
index<-sample(nrow(heart),0.75*nrow(heart))

在训练数据上生成模型,然后用测试数据验证模型。

   
glm(family = "binomial")
# family = " 二项式 "意味着只包含两个结果。

为了检查我们的模型是如何生成的,我们需要计算预测分数和建立混淆矩阵来了解模型的准确性。

   
pred<-fitted(blr)
# 拟合只能用于获得生成模型的数据的预测分数。

图片

我们可以看到,预测的分数是患心脏病的概率。但我们必须找到一个适当的分界点,从这个分界点可以很容易地区分是否患有心脏病。

为此,我们需要ROC曲线,这是一个显示分类模型在所有分类阈值下的性能的图形。它将使我们能够采取适当的临界值。

   
pred<-prediction(train$pred,train$target)
perf<-performance(pred,"tpr","fpr")
plot(perf,colorize = T,print.cutoffs.at = seq(0.1,by = 0.1))

图片

通过使用ROC曲线,我们可以观察到0.6具有更好的敏感性和特异性,因此我们选择0.6作为区分的分界点。

   
pred1<-ifelse(pred<0.6,"No","Yes")

图片

   
# 训练数据的准确性
acc_tr

图片

从训练数据的混淆矩阵中,我们知道模型有88.55%的准确性。

现在在测试数据上验证该模型

   
predict(type = "response")
## type = "response "是用来获得患有心脏病的概率的结果。
head(test)

图片

我们知道,对于训练数据来说,临界点是0.6。同样地,测试数据也会有相同的临界点。

   
confusionMatrix((pred1),target)

图片

   
#测试数据的准确性.

图片

检查我们的预测值有多少位于曲线内

   
[email protected]

图片

我们可以得出结论,我们的准确率为81.58%,90.26%的预测值位于曲线之下。同时,我们的错误分类率为18.42%。

Naive Bayes算法

在执行Naive Bayes算法之前,需要删除我们在执行BLR时添加的额外预测列。

   
#naivebayes模型
nB(target~.)

用训练数据检查模型,并创建其混淆矩阵,来了解模型的准确程度。

   
predict(train)
confMat(pred,target)

图片

图片

我们可以说,贝叶斯算法对训练数据的准确率为85.46%。

现在,通过预测和创建混淆矩阵来验证测试数据的模型。

   
Matrix(pred,target)

图片

图片

我们可以得出结论,在Naive Bayes算法的帮助下生成的模型准确率为78.95%,或者我们也可以说Naive Bayes算法的错误分类率为21.05%。

决策树

在实施决策树之前,我们需要删除我们在执行Naive Bayes算法时添加的额外列。

   
train$pred<-NULL

rpart代表递归分区和回归树

当自变量和因变量都是连续的或分类的时候,就会用到rpart。

rpart会自动检测是否要根据因变量进行回归或分类。

实施决策树

   
plot(tree)

图片

在决策树的帮助下,我们可以说所有变量中最重要的是CP、CA、THAL、Oldpeak。

让我们用测试数据来验证这个模型,并找出模型的准确性。

   
conMat(pred,targ)

图片

图片

我们可以说,决策树的准确率为76.32%,或者说它的错误分类率为23.68%。

随机森林

在执行随机森林之前,我们需要删除我们在执行决策树时添加的额外预测列。

   
test$pred<-NULL

在随机森林中,我们不需要将数据分成训练数据和测试数据,我们直接在整个数据上生成模型。为了生成模型,我们需要使用随机森林库

   
# Set.seed通过限制permutation来控制随机性。

set.seed(100)
model_rf<-randomForest(target~.,data = heart)
model_rf

图片

在图上绘制出随机森林与误差的关系。

   
plot(model_rf)

图片

红线代表没有心脏病的MCR,绿线代表有心脏病的MCR,黑线代表总体MCR或OOB误差。总体误差率是我们感兴趣的,结果不错。

结论

在进行了各种分类技术并考虑到它们的准确性后,我们可以得出结论,所有模型的准确性都在76%到84%之间。其中,随机森林的准确率略高,为83.5%。

数据获取

在下面公众号后台回复“心脏病数****据”,可免费获取完整数据。

图片

本文摘选  R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病  ,点击“阅读原文”获取全文完整资料。

图片


点击标题查阅往期内容

R语言逻辑回归logistic模型分析泰坦尼克titanic数据集预测生还情况R语言是否对二分连续变量执行逻辑回归
R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据
R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析
R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者
R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险
R语言用局部加权回归(Lowess)对logistic逻辑回归诊断和残差分析R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化
R语言用线性模型进行臭氧预测:加权泊松回归,普通最小二乘,加权负二项式模型,多重插补缺失值R语言Bootstrap的岭回归和自适应LASSO回归可视化
R语言中回归和分类模型选择的性能指标
R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据
R语言计量经济学:虚拟变量(哑变量)在线性回归模型中的应用
R语言 线性混合效应模型实战案例
R语言混合效应逻辑回归(mixed effects logistic)模型分析肺癌数据
R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状
R语言基于copula的贝叶斯分层混合模型的诊断准确性研究
R语言建立和可视化混合效应模型mixed effect model
R语言LME4混合效应模型研究教师的受欢迎程度
R语言 线性混合效应模型实战案例
R语言用Rshiny探索lme4广义线性混合模型(GLMM)和线性混合模型(LMM)
R语言基于copula的贝叶斯分层混合模型的诊断准确性研究
R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题
基于R语言的lmer混合线性回归模型
R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型
R语言分层线性模型案例
R语言用WinBUGS 软件对学术能力测验(SAT)建立分层模型
使用SAS,Stata,HLM,R,SPSS和Mplus的分层线性模型HLM
R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型
SPSS中的多层(等级)线性模型Multilevel linear models研究整容手术数据
用SPSS估计HLM多层(层次)线性模型模型

标签:语言,模型,Naive,回归,Bayes,数据,我们,决策树
From: https://www.cnblogs.com/tecdat/p/18132288

相关文章

  • R语言基于决策树的银行信贷风险预警模型
    原文链接:http://tecdat.cn/?p=2783原文出处:拓端数据部落公众号 引言我国经济高速发展,个人信贷业务也随着快速发展,而个人信贷业务对提高内需,促进消费也有拉动作用。有正必有反,在个人信贷业务规模不断扩大的同时,信贷的违约等风险问题也日益突出,一定程度上制约着我国的信贷市场......
  • 决策树模型(4)Cart算法
    Cart算法Cart是Classificationandregressiontree的缩写,即分类回归树。它和前面的ID3,C4.5等算法思想一致都是通过对输入空间进行递归划分并确定每个单元上预测的概率分布,进而进行回归和分类任务。只不过由于任务的不同,所以回归树和分类树的划分准则并不相同。Cart生成回归......
  • 贝叶斯定理推导(Bayes's Theorem)
    这里用文氏图(Venn diagram)来推导一下贝叶斯定理。 假设A和B为两个不相互独立的事件。 交集(intersection): 上图红色部分即为事件A和事件B的交集。 并集(union):  由Venndiagram可以看出,在事件B已经发生的情况下,事件A发生的概率为事件A和事件B的交集除以事件B: ......
  • 树模型系列——2、决策树生成算法
    1ID3算法ID——IterativeDichotomiser(迭代二分器)从根结点(rootnode)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;在对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为......
  • Hadoop3.1.3+Spark2.3.4全分布决策树
    该文档是一些配置全分布的注意事项(遇到的坑)与个人的一些指令备注,阅读文档前需要配置好网络,具体可以参考:网络配置。linux系统选择的是Centos7首先是一些小工具:小技巧1.Xshell:可以更方便地批量操控虚拟机进行全分布:这样输入任何指令都可以输入给所有虚拟机,方便全分布的配置......
  • 经典机器学习算法:线性回归。逻辑回归。决策树。支持向量机(SVM)。朴素贝叶斯(Naive Baye
    目录经典机器学习算法分别举例说明这些算法的应用,并对比优劣以及实际应用场景。......
  • 树模型系列——1、决策树算法简介
    1.决策树简介决策树(decisiontree)是机器学习中一种非参数的监督学习算法,可用于分类与回归。其中分类决策树是基于变量特征对离散变量目标值进行分类的,可用于二分类或多分类;回归决策树是基于变量特征对连续变量目标值进行分类的,可用于连续变量的回归拟合。从上图看,可知树形结构......
  • 1.7 - 决策树
    1.模型理念香农信息论:一个系统越是混乱,信息熵越高,系统越是有序,信息熵越低。S= ∑(-plog(p)),因此,系统内变量越多,信息熵越大,变量之间出现的概率越平均,信息熵越大。在银行借贷决策模型中,判定一个人是否可以借贷,每个选中这个人的一个特征数据进行判断,然后再上次判断......
  • 【机器学习】决策树学习下篇(详解)
    引言在当今数据驱动的时代,机器学习技术已成为解决复杂问题不可或缺的工具。其中,决策树学习作为一种基础且强大的算法,广泛应用于各种领域,包括但不限于金融风控、医疗诊断、客户关系管理等。决策树以其简单直观、易于理解和实现的特点,受到了数据科学家和业界专家的青睐。过拟合......
  • 决策树模型(3)决策树的生成与剪枝
    决策树的生成有了信息增益和信息增益比,我就可以以此衡量特征的相对好坏,进而可以用于决策树的生成。相对应的基于信息增益计算的方法所生成的决策树的算法我们叫做ID3算法,而基于信息增益的算法我们叫做C4.5,二者唯一的区别就在于一个使用信息增益衡量特征好坏而另外一个使用信息增......