全文链接: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)
#测试数据的准确性.
查看咱们的预测值有多少位于曲线内
auc@y.values
咱们能够得出结论,咱们的准确率为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多层(档次)线性模型模型