在R語(yǔ)言中實(shí)現(xiàn)Logistic邏輯回歸的操作
邏輯回歸是擬合回歸曲線的方法,當(dāng)y是分類(lèi)變量時(shí),y = f(x)。典型的使用這種模式被預(yù)測(cè)Ÿ給定一組預(yù)測(cè)的X。預(yù)測(cè)因子可以是連續(xù)的,分類(lèi)的或兩者的混合。
R中的邏輯回歸實(shí)現(xiàn)
R可以很容易地?cái)M合邏輯回歸模型。要調(diào)用的函數(shù)是glm(),擬合過(guò)程與線性回歸中使用的過(guò)程沒(méi)有太大差別。在這篇文章中,我將擬合一個(gè)二元邏輯回歸模型并解釋每一步。
數(shù)據(jù)集
我們將研究泰坦尼克號(hào)數(shù)據(jù)集。這個(gè)數(shù)據(jù)集有不同版本可以在線免費(fèi)獲得,但我建議使用Kaggle提供的數(shù)據(jù)集。
目標(biāo)是預(yù)測(cè)生存(如果乘客幸存,則為1,否則為0)基于某些諸如服務(wù)等級(jí),性別,年齡等特征。
我們將使用分類(lèi)變量和連續(xù)變量。
數(shù)據(jù)清理過(guò)程
在處理真實(shí)數(shù)據(jù)集時(shí),我們需要考慮到一些數(shù)據(jù)可能丟失的情況,因此我們需要為我們的分析準(zhǔn)備數(shù)據(jù)集。
作為第一步,我們使用該函數(shù)加載csv數(shù)據(jù)read.csv()。
使每個(gè)缺失值編碼為NA。
training.data.raw < - read.csv('train.csv',header = T,na.strings = c(“”))
現(xiàn)在我們需要檢查缺失的值,查看每個(gè)變量的唯一值,使用sapply()函數(shù)將函數(shù)作為參數(shù)傳遞給數(shù)據(jù)框的每一列。
PassengerId Survived Pclass Name Sex 0 0 0 0 0 Age SibSp Parch Ticket Fare 177 0 0 0 0 Cabin Embarked 687 2 length(unique(x))) PassengerId Survived Pclass Name Sex 891 2 3 891 2 Age SibSp Parch Ticket Fare 89 7 7 681 248 Cabin Embarked 148 4
對(duì)缺失值進(jìn)行可視化處理可能會(huì)有所幫助:可以繪制數(shù)據(jù)集并顯示缺失值:
機(jī)艙有太多的缺失值,我們不使用它。
使用subset()函數(shù)我們對(duì)原始數(shù)據(jù)集進(jìn)行子集化,只選擇相關(guān)列。
data < - subset(training.data.raw,select = c(2,3,5,6,7,8,10,12))
現(xiàn)在我們需要解釋其他缺失的值。通過(guò)在擬合函數(shù)內(nèi)設(shè)置參數(shù)來(lái)擬合廣義線性模型時(shí),R可以很容易地處理它們。
有不同的方法可以做到這一點(diǎn),一種典型的方法是用現(xiàn)有的平均值,中位數(shù)或模式代替缺失值。我將使用平均值。
data$ Age [is.na(data $ Age)] < - mean(data$ Age,na.rm = T)
就分類(lèi)變量而言,使用read.table()或read.csv()默認(rèn)會(huì)將分類(lèi)變量編碼為因子。
為了更好地理解R如何處理分類(lèi)變量,我們可以使用contrasts()函數(shù)。
在進(jìn)行擬合過(guò)程之前,先清潔和格式化數(shù)據(jù)。這個(gè)預(yù)處理步驟對(duì)于獲得模型的良好擬合和更好的預(yù)測(cè)能力通常是至關(guān)重要的。
模型擬合
我們將數(shù)據(jù)分成兩部分:訓(xùn)練和測(cè)試集。訓(xùn)練集將用于擬合我們的模型。
model <- glm(Survived ~.,family=binomial(link='logit'),data=train)
通過(guò)使用函數(shù),summary()我們獲得了我們模型的結(jié)果:
Deviance Residuals: Min 1Q Median 3Q Max -2.6064 -0.5954 -0.4254 0.6220 2.4165 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 5.137627 0.594998 8.635 < 2e-16 *** Pclass -1.087156 0.151168 -7.192 6.40e-13 *** Sexmale -2.756819 0.212026 -13.002 < 2e-16 *** Age -0.037267 0.008195 -4.547 5.43e-06 *** SibSp -0.292920 0.114642 -2.555 0.0106 * Parch -0.116576 0.128127 -0.910 0.3629 Fare 0.001528 0.002353 0.649 0.5160 EmbarkedQ -0.002656 0.400882 -0.007 0.9947 EmbarkedS -0.318786 0.252960 -1.260 0.2076 --- Signif. codes: 0 ‘***' 0.001 ‘**' 0.01 ‘*' 0.05 ‘.' 0.1 ‘ ' 1
解釋我們的邏輯回歸模型的結(jié)果
現(xiàn)在我們可以分析擬合并解釋模型告訴我們什么。
首先,我們可以看到SibSp,F(xiàn)are和Embarked沒(méi)有統(tǒng)計(jì)意義。至于統(tǒng)計(jì)上顯著的變量,性別具有最低的p值,這表明乘客的性別與存活的可能性有很強(qiáng)的關(guān)聯(lián)。
預(yù)測(cè)因子的負(fù)系數(shù)表明所有其他變量相同,男性乘客不太可能存活下來(lái)。
由于男性是虛擬變量,因此男性將對(duì)數(shù)概率降低2.75,而單位年齡增加則將對(duì)數(shù)概率降低0.037。
現(xiàn)在我們可以運(yùn)行anova()模型上的函數(shù)來(lái)分析偏差表
Analysis of Deviance Table Model: binomial, link: logit Response: Survived Terms added sequentially (first to last) Df Deviance Resid. Df Resid. Dev Pr(>Chi) NULL 799 1065.39 Pclass 1 83.607 798 981.79 < 2.2e-16 *** Sex 1 240.014 797 741.77 < 2.2e-16 *** Age 1 17.495 796 724.28 2.881e-05 *** SibSp 1 10.842 795 713.43 0.000992 *** Parch 1 0.863 794 712.57 0.352873 Fare 1 0.994 793 711.58 0.318717 Embarked 2 2.187 791 709.39 0.334990
零偏差和剩余偏差之間的差異越大越好。通過(guò)分析表格,我們可以看到每次添加一個(gè)變量時(shí)出現(xiàn)偏差的情況。
同樣,增加Pclass,Sex and Age可以顯著減少殘余偏差。
這里的大p值表示沒(méi)有變量的模型或多或少地解釋了相同的變化量。最終你想看到的是一個(gè)顯著的下降和偏差A(yù)IC。
評(píng)估模型的預(yù)測(cè)能力
在上面的步驟,我們簡(jiǎn)要評(píng)價(jià)模型的擬合。通過(guò)設(shè)置參數(shù)type='response',R將以P(y = 1 | X)的形式輸出概率。我們的決策邊界將是0.5。如果P(y = 1 | X)> 0.5,則y = 1,否則y = 0。請(qǐng)注意,對(duì)于某些應(yīng)用場(chǎng)景,不同的閾值可能是更好的選擇。
fitting.results < - ifelse(fitted.results> 0.5,1,0) misClasificError < - mean(fitted.results!= test $ Survived
測(cè)試集上的0.84精度是相當(dāng)不錯(cuò)的結(jié)果。但是,如果您希望得到更精確的分?jǐn)?shù),最好運(yùn)行交叉驗(yàn)證,如k折交叉驗(yàn)證驗(yàn)證。
作為最后一步,我們將繪制ROC曲線并計(jì)算二元分類(lèi)器典型性能測(cè)量的AUC(曲線下面積)。
ROC是通過(guò)在各種閾值設(shè)置下將真陽(yáng)性率(TPR)與假陽(yáng)性率(FPR)作圖而產(chǎn)生的曲線,而AUC是ROC曲線下的面積。作為一個(gè)經(jīng)驗(yàn)法則,具有良好預(yù)測(cè)能力的模型應(yīng)該接近于1。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
R語(yǔ)言刷題檢驗(yàn)數(shù)據(jù)缺失類(lèi)型過(guò)程詳解
這篇文章主要為大家介紹了R語(yǔ)言刷題中檢驗(yàn)數(shù)據(jù)缺失類(lèi)型的過(guò)程示例分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11R語(yǔ)言中邏輯回歸知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家總結(jié)了關(guān)于R語(yǔ)言中邏輯回歸知識(shí)點(diǎn)相關(guān)內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。2021-05-05使用R語(yǔ)言繪制散點(diǎn)圖結(jié)合邊際分布圖教程
這篇文章主要介紹了使用R語(yǔ)言利用ggplot繪制散點(diǎn)圖,并且在圖像的兩邊繪制邊際分布圖(包括邊際直方圖與邊際密度函數(shù))我們這里介紹兩種方法進(jìn)行繪制2021-11-11