最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

數(shù)據(jù)分享|R語言邏輯回歸、Naive Bayes貝葉斯、決策樹、隨機(jī)森林算法預(yù)測心臟病|附代碼

2023-09-13 17:34 作者:拓端tecdat  | 我要投稿

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

最近我們被客戶要求撰寫關(guān)于預(yù)測心臟病的研究報告,包括一些圖形和統(tǒng)計輸出。

這個數(shù)據(jù)集可以追溯到1988年,由四個數(shù)據(jù)庫組成。克利夫蘭、匈牙利、瑞士和長灘。"目標(biāo) "字段是指病人是否有心臟病。它的數(shù)值為整數(shù),0=無病,1=有病

數(shù)據(jù)集信息:

目標(biāo):

主要目的是預(yù)測給定的人是否有心臟病,借助于幾個因素,如年齡、膽固醇水平、胸痛類型等。

我們在這個問題上使用的算法是:

  • 二元邏輯回歸

  • Naive Bayes算法

  • 決策樹

  • 隨機(jī)森林

數(shù)據(jù)集的描述:

該數(shù)據(jù)有303個觀察值和14個變量。每個觀察值都包含關(guān)于個人的以下信息。

  • 年齡:- 個人的年齡,以年為單位

  • sex:- 性別(1=男性;0=女性)

  • cp - 胸痛類型(1=典型心絞痛;2=非典型心絞痛;3=非心絞痛;4=無癥狀)。

  • trestbps--靜息血壓

  • chol - 血清膽固醇,單位:mg/dl

  • fbs - 空腹血糖水平>120 mg/dl(1=真;0=假)

  • restecg - 靜息心電圖結(jié)果(0=正常;1=有ST-T;2=肥大)

  • thalach - 達(dá)到的最大心率

  • exang - 運(yùn)動誘發(fā)的心絞痛(1=是;0=否)

  • oldpeak - 相對于靜止?fàn)顟B(tài),運(yùn)動誘發(fā)的ST壓低

  • slope - 運(yùn)動時ST段峰值的斜率(1=上斜;2=平坦;3=下斜)

  • ca - 主要血管的數(shù)量(0-4),由Flourosopy著色

  • 地中海貧血癥--地中海貧血癥是一種遺傳性血液疾病,會影響身體產(chǎn)生血紅蛋白和紅細(xì)胞的能力。1=正常;2=固定缺陷;3=可逆轉(zhuǎn)缺陷

  • 目標(biāo)--預(yù)測屬性--心臟疾病的診斷(血管造影疾病狀態(tài))(值0=<50%直徑狹窄;值1=>50%直徑狹窄)

在Rstudio中加載數(shù)據(jù)

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

header = T意味著給定的數(shù)據(jù)有自己的標(biāo)題,或者換句話說,第一個觀測值也被考慮用于預(yù)測。

head(heart)

當(dāng)我們想查看和檢查數(shù)據(jù)的前六個觀察點時,我們使用head函數(shù)。

tail(heart)

顯示的是我們數(shù)據(jù)中最后面的六個觀察點

colSums(is.na(heart))

這個函數(shù)是用來檢查我們的數(shù)據(jù)是否包含任何NA值。
如果沒有發(fā)現(xiàn)NA,我們就可以繼續(xù)前進(jìn),否則我們就必須在之前刪除NA。

檢查我們的數(shù)據(jù)結(jié)構(gòu)

str(heart)

查看我們的數(shù)據(jù)摘要

summary(heart)

通過觀察以上的總結(jié),我們可以說以下幾點

  • 性別不是連續(xù)變量,因為根據(jù)我們的描述,它可以是男性或女性。因此,我們必須將性別這個變量名稱從整數(shù)轉(zhuǎn)換為因子。

  • cp不能成為連續(xù)變量,因為它是胸痛的類型。由于它是胸痛的類型,我們必須將變量cp轉(zhuǎn)換為因子。

  • fbs不能是連續(xù)變量或整數(shù),因為它顯示血糖水平是否低于120mg/dl。

  • restecg是因子,因為它是心電圖結(jié)果的類型。它不能是整數(shù)。所以,我們要把它轉(zhuǎn)換為因子和標(biāo)簽。

  • 根據(jù)數(shù)據(jù)集的描述,exang應(yīng)該是因子。心絞痛發(fā)生或不發(fā)生。因此,將該變量轉(zhuǎn)換為因子。

  • 斜率不能是整數(shù),因為它是在心電圖中觀察到的斜率類型。因此,我們將變量轉(zhuǎn)換為因子。

  • 根據(jù)數(shù)據(jù)集的描述,ca不是整數(shù)。因此,我們要將該變量轉(zhuǎn)換為因子。

  • thal不是整數(shù),因為它是地中海貧血的類型。因此,我們將變量轉(zhuǎn)換為因子。

  • 目標(biāo)是預(yù)測變量,告訴我們這個人是否有心臟病。因此,我們將該變量轉(zhuǎn)換為因子,并為其貼上標(biāo)簽。

根據(jù)上述考慮,我們對變量做了一些變化

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

檢查上述變化是否執(zhí)行成功

str(heart)

summary(heart)

EDA

EDA是探索性數(shù)據(jù)分析(Exploratory Data Analysis)的縮寫,它是一種數(shù)據(jù)分析的方法/哲學(xué),采用各種技術(shù)(主要是圖形技術(shù))來深入了解數(shù)據(jù)集。

對于圖形表示,我們需要庫 "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")

我們可以得出結(jié)論,與60歲以上的人相比,40至60歲的人患心臟病的概率最高。

table?<-?table(cp)pie(table)

我們可以得出結(jié)論,在所有類型的胸痛中,在個人身上觀察到的大多數(shù)是典型的胸痛類型,然后是非心絞痛。

點擊標(biāo)題查閱往期內(nèi)容

R語言用邏輯回歸、決策樹和隨機(jī)森林對信貸數(shù)據(jù)集進(jìn)行分類預(yù)測

左右滑動查看更多

01

02

03

04

執(zhí)行機(jī)器學(xué)習(xí)算法

Logistic回歸

首先,我們將數(shù)據(jù)集分為訓(xùn)練數(shù)據(jù)(75%)和測試數(shù)據(jù)(25%)。

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

在訓(xùn)練數(shù)據(jù)上生成模型,然后用測試數(shù)據(jù)驗證模型。

glm(family?=?"binomial")#?family?=?"?二項式?"意味著只包含兩個結(jié)果。

為了檢查我們的模型是如何生成的,我們需要計算預(yù)測分?jǐn)?shù)和建立混淆矩陣來了解模型的準(zhǔn)確性。

pred<-fitted(blr)#?擬合只能用于獲得生成模型的數(shù)據(jù)的預(yù)測分?jǐn)?shù)。

我們可以看到,預(yù)測的分?jǐn)?shù)是患心臟病的概率。但我們必須找到一個適當(dāng)?shù)姆纸琰c,從這個分界點可以很容易地區(qū)分是否患有心臟病。

為此,我們需要ROC曲線,這是一個顯示分類模型在所有分類閾值下的性能的圖形。它將使我們能夠采取適當(dāng)?shù)呐R界值。

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作為區(qū)分的分界點。

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

#?訓(xùn)練數(shù)據(jù)的準(zhǔn)確性acc_tr

從訓(xùn)練數(shù)據(jù)的混淆矩陣中,我們知道模型有88.55%的準(zhǔn)確性。

現(xiàn)在在測試數(shù)據(jù)上驗證該模型

predict(type?=?"response")##?type?=?"response?"是用來獲得患有心臟病的概率的結(jié)果。head(test)

我們知道,對于訓(xùn)練數(shù)據(jù)來說,臨界點是0.6。同樣地,測試數(shù)據(jù)也會有相同的臨界點。

confusionMatrix((pred1),target)

#測試數(shù)據(jù)的準(zhǔn)確性.

檢查我們的預(yù)測值有多少位于曲線內(nèi)

auc@y.values

我們可以得出結(jié)論,我們的準(zhǔn)確率為81.58%,90.26%的預(yù)測值位于曲線之下。同時,我們的錯誤分類率為18.42%。

Naive Bayes算法

在執(zhí)行Naive Bayes算法之前,需要刪除我們在執(zhí)行BLR時添加的額外預(yù)測列。

#naivebayes模型nB(target~.)

用訓(xùn)練數(shù)據(jù)檢查模型,并創(chuàng)建其混淆矩陣,來了解模型的準(zhǔn)確程度。

predict(train)confMat(pred,target)

我們可以說,貝葉斯算法對訓(xùn)練數(shù)據(jù)的準(zhǔn)確率為85.46%。

現(xiàn)在,通過預(yù)測和創(chuàng)建混淆矩陣來驗證測試數(shù)據(jù)的模型。

Matrix(pred,target)

我們可以得出結(jié)論,在Naive Bayes算法的幫助下生成的模型準(zhǔn)確率為78.95%,或者我們也可以說Naive Bayes算法的錯誤分類率為21.05%。

決策樹

在實施決策樹之前,我們需要刪除我們在執(zhí)行Naive Bayes算法時添加的額外列。

train$pred<-NULL

rpart代表遞歸分區(qū)和回歸樹

當(dāng)自變量和因變量都是連續(xù)的或分類的時候,就會用到rpart。

rpart會自動檢測是否要根據(jù)因變量進(jìn)行回歸或分類。

實施決策樹

plot(tree)

在決策樹的幫助下,我們可以說所有變量中最重要的是CP、CA、THAL、Oldpeak。

讓我們用測試數(shù)據(jù)來驗證這個模型,并找出模型的準(zhǔn)確性。

conMat(pred,targ)

我們可以說,決策樹的準(zhǔn)確率為76.32%,或者說它的錯誤分類率為23.68%。

隨機(jī)森林

在執(zhí)行隨機(jī)森林之前,我們需要刪除我們在執(zhí)行決策樹時添加的額外預(yù)測列。

test$pred<-NULL

在隨機(jī)森林中,我們不需要將數(shù)據(jù)分成訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù),我們直接在整個數(shù)據(jù)上生成模型。為了生成模型,我們需要使用隨機(jī)森林庫

#?Set.seed通過限制permutation來控制隨機(jī)性。set.seed(100)model_rf<-randomForest(target~.,data?=?heart)model_rf

在圖上繪制出隨機(jī)森林與誤差的關(guān)系。

plot(model_rf)

紅線代表沒有心臟病的MCR,綠線代表有心臟病的MCR,黑線代表總體MCR或OOB誤差。總體誤差率是我們感興趣的,結(jié)果不錯。

結(jié)論

在進(jìn)行了各種分類技術(shù)并考慮到它們的準(zhǔn)確性后,我們可以得出結(jié)論,所有模型的準(zhǔn)確性都在76%到84%之間。其中,隨機(jī)森林的準(zhǔn)確率略高,為83.5%。

數(shù)據(jù)獲取

在下面公眾號后臺回復(fù)“心臟病數(shù)****據(jù)”,可免費(fèi)獲取完整數(shù)據(jù)。

本文摘選?《?R語言邏輯回歸、Naive Bayes貝葉斯、決策樹、隨機(jī)森林算法預(yù)測心臟病?》?,點擊“閱讀原文”獲取全文完整資料。

點擊標(biāo)題查閱往期內(nèi)容

R語言邏輯回歸logistic模型分析泰坦尼克titanic數(shù)據(jù)集預(yù)測生還情況R語言是否對二分連續(xù)變量執(zhí)行邏輯回歸
R語言用lme4多層次(混合效應(yīng))廣義線性模型(GLM),邏輯回歸分析教育留級調(diào)查數(shù)據(jù)
R語言隨機(jī)森林RandomForest、邏輯回歸Logisitc預(yù)測心臟病數(shù)據(jù)和可視化分析
R語言基于Bagging分類的邏輯回歸(Logistic Regression)、決策樹、森林分析心臟病患者
R語言邏輯回歸(Logistic回歸)模型分類預(yù)測病人冠心病風(fēng)險
R語言用局部加權(quán)回歸(Lowess)對logistic邏輯回歸診斷和殘差分析R語言用主成分PCA、?邏輯回歸、決策樹、隨機(jī)森林分析心臟病數(shù)據(jù)并高維可視化
R語言用線性模型進(jìn)行臭氧預(yù)測:加權(quán)泊松回歸,普通最小二乘,加權(quán)負(fù)二項式模型,多重插補(bǔ)缺失值R語言Bootstrap的嶺回歸和自適應(yīng)LASSO回歸可視化
R語言中回歸和分類模型選擇的性能指標(biāo)
R語言多元時間序列滾動預(yù)測:ARIMA、回歸、ARIMAX模型分析
R語言用lme4多層次(混合效應(yīng))廣義線性模型(GLM),邏輯回歸分析教育留級調(diào)查數(shù)據(jù)
R語言計量經(jīng)濟(jì)學(xué):虛擬變量(啞變量)在線性回歸模型中的應(yīng)用
R語言 線性混合效應(yīng)模型實戰(zhàn)案例
R語言混合效應(yīng)邏輯回歸(mixed effects logistic)模型分析肺癌數(shù)據(jù)
R語言如何用潛類別混合效應(yīng)模型(LCMM)分析抑郁癥狀
R語言基于copula的貝葉斯分層混合模型的診斷準(zhǔn)確性研究
R語言建立和可視化混合效應(yīng)模型mixed effect model
R語言LME4混合效應(yīng)模型研究教師的受歡迎程度
R語言 線性混合效應(yīng)模型實戰(zhàn)案例
R語言用Rshiny探索lme4廣義線性混合模型(GLMM)和線性混合模型(LMM)
R語言基于copula的貝葉斯分層混合模型的診斷準(zhǔn)確性研究
R語言如何解決線性混合模型中畸形擬合(Singular fit)的問題
基于R語言的lmer混合線性回歸模型
R語言用WinBUGS 軟件對學(xué)術(shù)能力測驗建立層次(分層)貝葉斯模型
R語言分層線性模型案例
R語言用WinBUGS 軟件對學(xué)術(shù)能力測驗(SAT)建立分層模型
使用SAS,Stata,HLM,R,SPSS和Mplus的分層線性模型HLM
R語言用WinBUGS 軟件對學(xué)術(shù)能力測驗建立層次(分層)貝葉斯模型
SPSS中的多層(等級)線性模型Multilevel linear models研究整容手術(shù)數(shù)據(jù)
用SPSS估計HLM多層(層次)線性模型模型


數(shù)據(jù)分享|R語言邏輯回歸、Naive Bayes貝葉斯、決策樹、隨機(jī)森林算法預(yù)測心臟病|附代碼的評論 (共 條)

分享到微博請遵守國家法律
县级市| 连江县| 和顺县| 横山县| 容城县| 沂水县| 黄浦区| 门头沟区| 垣曲县| 从江县| 湘乡市| 福建省| 奉节县| 临武县| 光泽县| 京山县| 探索| 曲水县| 时尚| 会泽县| 邢台县| 铜山县| 称多县| 虎林市| 黄大仙区| 杭州市| 绥阳县| 昌平区| 卫辉市| 文登市| 武平县| 邯郸县| 凉城县| 新源县| 鸡西市| 台北县| 钟祥市| 高台县| 疏附县| 体育| 兴城市|