【視頻】R語言邏輯回歸(Logistic回歸)模型分類預(yù)測(cè)病人冠心病風(fēng)險(xiǎn)|數(shù)據(jù)分享
原文鏈接:http://tecdat.cn/?p=22410
本文介紹了邏輯回歸并在R語言中用邏輯回歸(Logistic回歸)模型分類預(yù)測(cè)病人冠心病風(fēng)險(xiǎn)數(shù)據(jù)(查看文末了解數(shù)據(jù)獲取方式)。
邏輯回歸是機(jī)器學(xué)習(xí)借用的另一種統(tǒng)計(jì)分析方法。當(dāng)我們的因變量是二分或二元時(shí)使用它。
視頻:R語言邏輯回歸(Logistic回歸)模型分類預(yù)測(cè)病人冠心病風(fēng)險(xiǎn)
它只是表示一個(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)居民的心血管研究。其目的是預(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)查看更多

假設(shè)
為什么我們不繪制原始?xì)埐睿?/h3>ggplot(data = risk aes(x = .fitted, y = .resid)) +
labs(x = "預(yù)測(cè)值", y = "原始?xì)埐?)
ggplot(data = risk aes(x = .fitted, y = .resid)) +
labs(x = "預(yù)測(cè)值", y = "原始?xì)埐?)
分級(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" )
數(shù)據(jù)獲取
在下面公眾號(hào)后臺(tái)回復(fù)“冠心病數(shù)據(jù)”,可獲取完整數(shù)據(jù)。

點(diǎn)擊文末“閱讀原文”
獲取全文完整資料。
本文選自《R語言邏輯回歸(Logistic回歸)模型分類預(yù)測(cè)病人冠心病風(fēng)險(xiǎn)》。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容

![]()




