【視頻】R語言邏輯回歸(Logistic回歸)模型分類預(yù)測(cè)病人冠心病風(fēng)險(xiǎn)|數(shù)據(jù)分享|附代碼
原文鏈接:http://tecdat.cn/?p=22410?
最近我們被客戶要求撰寫關(guān)于邏輯回歸的研究報(bào)告,包括一些圖形和統(tǒng)計(jì)輸出。
本文介紹了邏輯回歸并在R語言中用邏輯回歸(Logistic回歸)模型分類預(yù)測(cè)病人冠心病風(fēng)險(xiǎn)數(shù)據(jù)
邏輯回歸是機(jī)器學(xué)習(xí)借用的另一種統(tǒng)計(jì)分析方法。當(dāng)我們的因變量是二分或二元時(shí)使用它。
它只是表示一個(gè)只有 2 個(gè)輸出的變量,例如,預(yù)測(cè)拋硬幣(正面/反面)的情況。結(jié)果是二進(jìn)制的:如果硬幣是正面,則為 1,如果硬幣為反面,則為 0。這種回歸技術(shù)類似于線性回歸,可用于預(yù)測(cè)分類問題的概率。

為什么我們使用邏輯回歸而不是線性回歸?
我們現(xiàn)在知道它僅在我們的因變量是二元的而在線性回歸中該因變量是連續(xù)時(shí)使用。
現(xiàn)在,如果我們使用線性回歸來找到旨在最小化預(yù)測(cè)值和實(shí)際值之間距離的最佳擬合線,這條線將是這樣的:
這里的閾值為 0.5,這意味著如果 h(x) 的值大于 0.5,則我們預(yù)測(cè)為惡性腫瘤(1),如果小于 0.5,則我們預(yù)測(cè)為良性腫瘤(0)。

這里一切似乎都很好,但現(xiàn)在讓我們稍微改變一下,我們?cè)跀?shù)據(jù)集中添加一些異常值,現(xiàn)在這條最佳擬合線將移動(dòng)到該點(diǎn)。像這樣:
你看到這里有什么問題嗎?藍(lán)線代表新閾值,此處可能為 0.2。為了保持我們的預(yù)測(cè)正確,我們不得不降低我們的閾值。因此,我們可以說線性回歸容易出現(xiàn)異常值?,F(xiàn)在如果預(yù)測(cè)值大于 0.2,那么只有這個(gè)回歸會(huì)給出正確的輸出。
線性回歸的另一個(gè)問題是預(yù)測(cè)值可能超出范圍。我們知道概率可以在 0 和 1 之間,但是如果我們使用線性回歸,這個(gè)概率可能會(huì)超過 1 或低于 0。

Sigmoid函數(shù)
為此,我們最好有一個(gè)函數(shù)將任何實(shí)際值映射到 0 和 1 之間的區(qū)間內(nèi)的值。您一定想知道邏輯回歸如何將線性回歸的輸出壓縮在 0 和 1 之間。
Sigmoid 函數(shù)是一種數(shù)學(xué)函數(shù),用于將預(yù)測(cè)值映射到概率。該函數(shù)能夠?qū)⑷魏螌?shí)際值映射到 0 和 1 范圍內(nèi)的另一個(gè)值。?
規(guī)則是邏輯回歸的值必須在 0 和 1 之間。由于它不能超過值 1 的限制,在圖形上它會(huì)形成一條“S”形的曲線。這是識(shí)別 Sigmoid 函數(shù)或邏輯函數(shù)的簡(jiǎn)單方法。
關(guān)于邏輯回歸,使用的概念是閾值。閾值有助于定義 0 或 1 的概率。例如,高于閾值的值趨于 1,低于閾值的值趨于 0。
這就是所謂的 sigmoid 函數(shù),它是這樣定義的:
最遠(yuǎn)離 0 的 x值?映射到接近 0 或接近 1 的 y值。x接近 0 的值??將是我們算法中概率的一個(gè)很好的近似值。然后我們可以選擇一個(gè)閾值并將概率轉(zhuǎn)換為 0 或 1 預(yù)測(cè)。
Sigmoid 是邏輯回歸的激活函數(shù)。

?
成本函數(shù)
成本函數(shù)是用于計(jì)算誤差的數(shù)學(xué)公式,它是我們的預(yù)測(cè)值和實(shí)際值之間的差異。它只是衡量模型在估計(jì) x 和 y 之間關(guān)系的能力方面的錯(cuò)誤程度。當(dāng)我們考慮成本函數(shù)時(shí),首先想到的是經(jīng)典的平方誤差函數(shù)。?
m??- 示例數(shù),
x(i)??- 第i個(gè)示例?的特征向量?,
y(i)??- 第i個(gè)示例?的實(shí)際值?,
θ?? - 參數(shù)向量。?
?

如果我們有一個(gè)線性激活函數(shù)h θ?(x)?那就沒問題了。但是使用我們的新 sigmoid 函數(shù),我們沒有平方誤差的正二階導(dǎo)數(shù)。這意味著它是非凸函數(shù)。我們不想陷入局部最優(yōu),因此我們定義了一個(gè)新的成本函數(shù):?
這稱為交叉熵成本。如果您仔細(xì)觀察,您可能會(huì)注意到,當(dāng)預(yù)測(cè)值接近實(shí)際值時(shí),0 和 1 實(shí)際值的成本都將接近于零。
?

讓我們看看當(dāng) y=1 和 y=0 時(shí)成本函數(shù)的圖形是什么
這里的藍(lán)線代表1類(y=1),代價(jià)函數(shù)的右項(xiàng)會(huì)消失?,F(xiàn)在,如果預(yù)測(cè)概率接近 1,那么我們的損失會(huì)更小,當(dāng)概率接近 0 時(shí),我們的損失函數(shù)會(huì)達(dá)到無窮大。
紅線代表 0 類(y=0),左項(xiàng)將在我們的成本函數(shù)中消失,如果預(yù)測(cè)概率接近 0,那么我們的損失函數(shù)會(huì)更小,但如果我們的概率接近 1,那么我們的損失函數(shù)會(huì)達(dá)到無窮大。
此成本函數(shù)也稱為對(duì)數(shù)損失。它還確保隨著正確答案的概率最大化,錯(cuò)誤答案的概率最小化。此成本函數(shù)的值越低,精度越高。

如果我們結(jié)合這兩個(gè)圖,我們將得到一個(gè)只有 1 個(gè)局部最小值的凸圖,現(xiàn)在在這里使用梯度下降很容易。
梯度下降優(yōu)化
我們將嘗試了解如何利用梯度下降來計(jì)算最小成本。
梯度下降以這樣一種方式改變我們的權(quán)重值,它總是收斂到最小點(diǎn),或者我們也可以說,它旨在找到最小化模型損失函數(shù)的最優(yōu)權(quán)重。它是一種迭代方法,通過計(jì)算隨機(jī)點(diǎn)的斜率然后沿相反方向移動(dòng)來找到函數(shù)的最小值。

R語言邏輯回歸(Logistic回歸)模型分類預(yù)測(cè)病人冠心病風(fēng)險(xiǎn)
本文的目的是完成一個(gè)邏輯回歸分析。使你對(duì)分析步驟和思維過程有一個(gè)基本概念。
library(tidyverse)library(broom)
這些數(shù)據(jù)來自一項(xiàng)正在進(jìn)行的對(duì)鎮(zhèn)居民的心血管研究?(?查看文末了解數(shù)據(jù)獲取方式?)?。其目的是預(yù)測(cè)一個(gè)病人是否有未來10年的冠心病風(fēng)險(xiǎn)。該數(shù)據(jù)集包括以下內(nèi)容。
男性:0=女性;1=男性
年齡。
教育。1 = 高中以下;2 = 高中;3 = 大學(xué)或職業(yè)學(xué)校;4 = 大學(xué)以上
當(dāng)前是否吸煙。0=不吸煙;1=吸煙者
cigsPerDay: 每天抽的煙數(shù)量(估計(jì)平均)。
BPMeds: 0 = 不服用降壓藥;1 = 正在服用降壓藥
中風(fēng)。0 = 家族史中不存在中風(fēng);1 = 家族史中存在中風(fēng)
高血壓。0 =高血壓在家族史上不流行;1 =高血壓在家族史上流行
糖尿?。? = 沒有;1 = 有
totChol: 總膽固醇(mgdL)
sysBP: 收縮壓(mmHg)
diaBP: 舒張壓(mmHg)
BMI: 體重指數(shù)
心率
葡萄糖:總葡萄糖mgdL
TenYearCHD: 0 = 患者沒有未來10年冠心病的風(fēng)險(xiǎn); 1 = 患者有未來10年冠心病的風(fēng)險(xiǎn)
加載并準(zhǔn)備數(shù)據(jù)
read_csv("fraingha")?%>%
??drop_na()?%>%?#刪除具有缺失值的觀察值
??ageCent?=?age?-?mean(age),?
??totCholCent?=?totChol?-?mean(totChol),
擬合邏輯回歸模型
glm(TenYearCHD?~?age?+??Smoker?+??CholCent,?
??????????????data?=?data,?family?=?binomial)

預(yù)測(cè)
對(duì)于新病人
?data_frame(ageCent?=?(60?-?49.552),?
?????????????????totCholCent?=?(263?-?236.848),

預(yù)測(cè)對(duì)數(shù)幾率
predict(risk_m,?x0)

預(yù)測(cè)概率

根據(jù)這個(gè)概率,你是否認(rèn)為這個(gè)病人在未來10年內(nèi)有患冠心病的高風(fēng)險(xiǎn)?為什么?
risk

混淆矩陣
risk_m?%>%
??group_by(TenYearCHD,?risk_predict)?%>%
??kable(format="markdown")

mutate(?predict?=?if_else(.fitted?>?threshold,?"1:?Yes",?"0:?No"))

有多大比例的觀察結(jié)果被錯(cuò)誤分類?
依靠混淆矩陣來評(píng)估模型的準(zhǔn)確性有什么缺點(diǎn)?
ROC曲線
ggplot(risk_m_aug,?
??oc(n.cuts?=?10,?labelround?=?3)?+?
??geom_abline(intercept?=?0)?+

auc(roc?)$AUC

一位醫(yī)生計(jì)劃使用你的模型的結(jié)果來幫助選擇病人參加一個(gè)新的心臟病預(yù)防計(jì)劃。她問你哪個(gè)閾值最適合為這個(gè)項(xiàng)目選擇病人。根據(jù)ROC曲線,你會(huì)向醫(yī)生推薦哪個(gè)閾值?為什么?
點(diǎn)擊標(biāo)題查閱往期內(nèi)容

R語言邏輯回歸(Logistic Regression)、回歸決策樹、隨機(jī)森林信用卡違約分析信貸數(shù)據(jù)集

左右滑動(dòng)查看更多

01
02
03
04
假設(shè)
為什么我們不繪制原始?xì)埐睿?/h1>
ggplot(data?=?risk?aes(x?=?.fitted,?y?=?.resid))?+
??labs(x?=?"預(yù)測(cè)值",?y?=?"原始?xì)埐?#34;)
分級(jí)的殘差圖
?plot(x?=??fitted,?y?=??resid,
????????????????xlab?=?"預(yù)測(cè)概率",?
????????????????main?=?"分級(jí)后的殘值與預(yù)測(cè)值的對(duì)比",
##?#?A?tibble:?2?x?2##???currentSmoker?mean_resid##???<fct>??????????????<dbl>##?1?0??????????????-2.95e-14##?2?1??????????????-2.42e-14
檢查假設(shè):
線性?- 隨機(jī)性?- 獨(dú)立性?
系數(shù)的推斷
currentSmoker1的測(cè)試統(tǒng)計(jì)量是如何計(jì)算的?
在統(tǒng)計(jì)學(xué)上,totalCholCent是否是預(yù)測(cè)一個(gè)人患冠心病高風(fēng)險(xiǎn)的重要因素?
用檢驗(yàn)統(tǒng)計(jì)量和P值來證明你的答案。
用置信區(qū)間說明你的答案。
偏離偏差檢驗(yàn)
?glm(TenYearCHD?~?ageCent?+?currentSmoker?+?totChol,?
??????????????data?=?heart_data,?family?=?binomial)
anova
AIC
根據(jù)偏離偏差檢驗(yàn),你會(huì)選擇哪個(gè)模型?
基于AIC,你會(huì)選擇哪個(gè)模型?
使用step逐步回歸
選擇模型
step(full_model?)
??kable(format?=?"markdown"?)



點(diǎn)擊文末?“閱讀原文”
獲取全文完整資料。
本文選自《R語言邏輯回歸(Logistic回歸)模型分類預(yù)測(cè)病人冠心病風(fēng)險(xiǎn)》。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
R語言邏輯回歸Logistic回歸分析預(yù)測(cè)股票漲跌
matlab用馬爾可夫鏈蒙特卡羅 (MCMC) 的Logistic邏輯回歸模型分析汽車實(shí)驗(yàn)數(shù)據(jù)
R語言邏輯回歸、Naive Bayes貝葉斯、決策樹、隨機(jī)森林算法預(yù)測(cè)心臟病
R語言邏輯回歸(Logistic Regression)、回歸決策樹、隨機(jī)森林信用卡違約分析信貸數(shù)據(jù)集PYTHON用戶流失數(shù)據(jù)挖掘:建立邏輯回歸、XGBOOST、隨機(jī)森林、決策樹、支持向量機(jī)、樸素貝葉斯和KMEANS聚類用戶畫像
Python對(duì)商店數(shù)據(jù)進(jìn)行l(wèi)stm和xgboost銷售量時(shí)間序列建模預(yù)測(cè)分析
PYTHON集成機(jī)器學(xué)習(xí):用ADABOOST、決策樹、邏輯回歸集成模型分類和回歸和網(wǎng)格搜索超參數(shù)優(yōu)化
R語言集成模型:提升樹boosting、隨機(jī)森林、約束最小二乘法加權(quán)平均模型融合分析時(shí)間序列數(shù)據(jù)
Python對(duì)商店數(shù)據(jù)進(jìn)行l(wèi)stm和xgboost銷售量時(shí)間序列建模預(yù)測(cè)分析
R語言用主成分PCA、?邏輯回歸、決策樹、隨機(jī)森林分析心臟病數(shù)據(jù)并高維可視化
R語言基于樹的方法:決策樹,隨機(jī)森林,Bagging,增強(qiáng)樹
R語言用邏輯回歸、決策樹和隨機(jī)森林對(duì)信貸數(shù)據(jù)集進(jìn)行分類預(yù)測(cè)
spss modeler用決策樹神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)ST的股票
R語言中使用線性模型、回歸決策樹自動(dòng)組合特征因子水平
R語言中自編基尼系數(shù)的CART回歸決策樹的實(shí)現(xiàn)
R語言用rle,svm和rpart決策樹進(jìn)行時(shí)間序列預(yù)測(cè)
python在Scikit-learn中用決策樹和隨機(jī)森林預(yù)測(cè)NBA獲勝者
python中使用scikit-learn和pandas決策樹進(jìn)行iris鳶尾花數(shù)據(jù)分類建模和交叉驗(yàn)證
R語言里的非線性模型:多項(xiàng)式回歸、局部樣條、平滑樣條、 廣義相加模型GAM分析
R語言用標(biāo)準(zhǔn)最小二乘OLS,廣義相加模型GAM?,樣條函數(shù)進(jìn)行邏輯回歸LOGISTIC分類
R語言ISLR工資數(shù)據(jù)進(jìn)行多項(xiàng)式回歸和樣條回歸分析
R語言中的多項(xiàng)式回歸、局部回歸、核平滑和平滑樣條回歸模型
R語言用泊松Poisson回歸、GAM樣條曲線模型預(yù)測(cè)騎自行車者的數(shù)量
R語言分位數(shù)回歸、GAM樣條曲線、指數(shù)平滑和SARIMA對(duì)電力負(fù)荷時(shí)間序列預(yù)測(cè)R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進(jìn)行回歸、分類和動(dòng)態(tài)可視化
如何用R語言在機(jī)器學(xué)習(xí)中建立集成模型?
R語言ARMA-EGARCH模型、集成預(yù)測(cè)算法對(duì)SPX實(shí)際波動(dòng)率進(jìn)行預(yù)測(cè)在python 深度學(xué)習(xí)Keras中計(jì)算神經(jīng)網(wǎng)絡(luò)集成模型R語言ARIMA集成模型預(yù)測(cè)時(shí)間序列分析R語言基于Bagging分類的邏輯回歸(Logistic Regression)、決策樹、森林分析心臟病患者
R語言基于樹的方法:決策樹,隨機(jī)森林,Bagging,增強(qiáng)樹
R語言基于Bootstrap的線性回歸預(yù)測(cè)置信區(qū)間估計(jì)方法
R語言使用bootstrap和增量法計(jì)算廣義線性模型(GLM)預(yù)測(cè)置信區(qū)間
R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進(jìn)行回歸、分類和動(dòng)態(tài)可視化
Python對(duì)商店數(shù)據(jù)進(jìn)行l(wèi)stm和xgboost銷售量時(shí)間序列建模預(yù)測(cè)分析
R語言隨機(jī)森林RandomForest、邏輯回歸Logisitc預(yù)測(cè)心臟病數(shù)據(jù)和可視化分析
R語言用主成分PCA、?邏輯回歸、決策樹、隨機(jī)森林分析心臟病數(shù)據(jù)并高維可視化
Matlab建立SVM,KNN和樸素貝葉斯模型分類繪制ROC曲線
matlab使用分位數(shù)隨機(jī)森林(QRF)回歸樹檢測(cè)異常值