數據分享|R語言邏輯回歸、Naive Bayes貝葉斯、決策樹、隨機森林|附代碼數據

2023-03-30     tecdat拓端

原標題:數據分享|R語言邏輯回歸、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)

#測試數據的準確性.

檢查我們的預測值有多少位於曲線內

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多層(層次)線性模型模型

文章來源: https://twgreatdaily.com/zh-cn/f30f7730142756d98b62655ce10b69c3.html