R語言邏輯回歸(Logistic Regression)、回歸決策樹、隨機森林|附代碼數據

2023-10-07     tecdat拓端

原標題:R語言邏輯回歸(Logistic Regression)、回歸決策樹、隨機森林|附代碼數據

原文連結:http://tecdat.cn/?p=23344

最近我們被客戶要求撰寫關於信用卡違約分析的研究報告,包括一些圖形和統計輸出。

本文中我們介紹了決策樹和隨機森林的概念,並在R語言中用邏輯回歸、回歸決策樹、隨機森林進行信用卡違約數據分析

決策樹是由節點和分支組成的簡單樹狀結構。根據每個節點的任何輸入特徵拆分數據,生成兩個或多個分支作為輸出。這個疊代過程增加了生成的分支的數量並對原始數據進行了分區。這種情況一直持續到生成一個節點,其中所有或幾乎所有數據都屬於同一類,並且不再可能進一步拆分或分支。

這整個過程生成了一個樹狀結構。第一個分裂節點稱為根節點。末端節點稱為葉子並與類標籤相關聯。從根到葉的路徑產生分類規則。

假設你是一名員工,你想吃食物。

您的行動方案將取決於多種情況。

如果你不餓,你就不會花錢。但是如果你餓了,那麼選擇就會改變。你的下一步行動取決於你的下一個情況,即你有沒有買午餐?

現在,如果你不吃午飯,你的行動將完全取決於你的下一個選擇,即是不是月底?如果是月底最後幾天,可以考慮不吃飯;否則,您不會將其視為偏好。

當涉及多個選擇來做出任何決定時,決策樹就會發揮作用。現在你必須做出相應的選擇以獲得有利的結果。

決策樹如何工作?

決策樹有兩個組成部分:熵和信息增益

熵是一個用來衡量信息或無序的概念。我們可以用它來衡量數據集的純度。

為了更好地理解熵,讓我們研究兩個不同的示例數據集,它們都有兩個類,分別表示為藍點和紅叉。在左側的示例數據集中,我們混合了藍點和紅叉。在右側數據集的示例中,我們只有紅十字。第二種情況——一個只有一個類樣本的數據集——是我們的目標:一個「純」數據子集。

熵可以是純度、無序或信息的量度。由於混合類,左邊的數據集不那麼純凈,更混亂(更無序,即更高的熵)。然而,更多的混亂也意味著更多的信息。實際上,如果數據集只有一類的點,那麼無論您嘗試多長時間,都無法從中提取太多信息。相比之下,如果數據集具有來自兩個類的點,則它也具有更高的信息提取潛力。所以,左邊數據集的熵值越高,也可以看作是潛在信息量越大。

信息增益為了評估一個特徵對分裂的好壞,計算分裂前後的熵差。

決策樹中每個拆分的目標是從混淆的數據集移動到兩個(或更多)更純的子集。理想情況下,分裂應該導致熵為 0.0 的子集。然而,在實踐中,如果拆分導致子集的總熵低於原始數據集就足夠了。

也就是說,我們首先計算分割前數據集的熵,然後計算分割後每個子集的熵。最後,在拆分之前從數據集的熵中減去由子集大小加權的輸出熵之和。這種差異衡量了信息的增益或熵的減少。如果信息增益是一個正數,這意味著我們從一個混亂的數據集轉移到了一些更純粹的子集。

然後,在每一步,我們將選擇在信息增益值最高的特徵上分割數據,因為這會產生最純粹的子集。

我們將首先分割信息增益最高的特徵。這是一個遞歸過程,直到所有子節點都是純的或直到信息增益為零。

隨機森林

隨機森林是另一種強大且最常用的監督學習算法。

許多比一個好。簡單來說,這就是隨機森林算法背後的概念。也就是說,許多決策樹可以產生比僅僅一棵決策樹本身更準確的預測。事實上,隨機森林算法是一種有監督的分類算法,它構建了 N 個經過稍微不同訓練的決策樹,並將它們合併在一起以獲得更準確和穩定的預測.

讓我們再次強調這個概念。整個想法依賴於多個決策樹,這些決策樹都經過略微不同的訓練,並且所有這些決策樹都被考慮到最終決策中。

在一個隨機森林中,N 棵決策樹在通過獲得的原始訓練集的一個子集上進行訓練自舉原始數據集,即通過帶放回的隨機抽樣。

此外,輸入特徵也可能因樹而異,作為原始特徵集的隨機子集。

N 個稍有不同訓練的樹將對相同的輸入向量產生 N 個稍有不同的預測。通常,多數規則適用於做出最終決定。N棵樹中的大多數提供的預測被用作最後一棵。

這種策略的優勢是顯而易見的。雖然來自單個樹的預測對訓練集中的噪聲高度敏感,但來自大多數樹的預測卻不是——前提是這些樹不相關。Bootstrap 採樣是通過在不同的訓練集上訓練樹來去相關樹的方法。

接下來,我們在R語言中用邏輯回歸、回歸決策樹、隨機森林進行信用卡違約分析。

信貸數據集,其中包含了銀行貸款申請人的信息。該文件包含1000名申請人的20條信息。

下面的代碼可以用來確定申請人是否有信用,以及他(或她)是否對貸款人有良好的信用風險。有幾種方法被應用到數據上,幫助做出這種判斷。在這個案例中,我們將看一下這些方法。

相關視頻Boosting原理與R語言提升回歸樹BRT預測短鰭鰻分布

拓端

,贊16

請注意,本例可能需要進行一些數據處理,以便為分析做準備。

我們首先將數據加載到R中。

credit <- read.csv(credit, header = TRUE, sep = ',')

這段代碼在數據上做了一個小的處理,為分析做準備。否則,就會出現錯誤,因為在某些文件的某一列中發現有四類因素。

基本上,任何4類因變量都被覆蓋為3類。繼續進行分析。

No.of.Credits[No.of.Credits == 4] <- 3

快速瀏覽一下數據,了解一下我們的工作內容。

str(credit)

你可能會立即注意到有幾個變量很顯眼。我們要排除它們。"信貸期限(月)"、"信貸金額 "和 "年齡"。

為什麼?

我們在這個模型中試圖把重點放在作為信用價值指標的數據分類或類別上。這些是分類變量,而不是數字變量。申請人有電話嗎?申請人是否已婚?是否有共同簽署人?申請人在同一地址住了多長時間?這類事情。

關於這些因素,重要的是我們知道它們與貸款決定的關係。良好的信用與某些因素的組合有關,從而使我們可以用機率將新的申請人按其特徵進行分類。

在數據中,這些問題的答案不是 "是 "或 "不是 "或 "十年"。答案被分組為更廣泛的分類。

我們需要做的是刪除真正的數字數據(時間、金額和年齡),保留分類因素。我們排除選定列。

然後我們創建一個簡短的函數,將整數轉換成因子。

for(i in S) credit[, i] <- as.factor(credit[, i])

現在我們有了有用的數據,我們可以開始應用不同的分析方法。

方法一:邏輯回歸(Logistic Regression)

第一步是創建我們的訓練數據集和測試數據集。訓練集用於訓練模型。測試集則用於評估模型的準確性。

我們把數據集分成任何我們喜歡的大小,在這裡我們使用三分之一,三分之二的分割。

(1:nrow(credit))[-sample(1:nrow(credit), size = 333)]

在這個階段,我們將使用glm()函數進行Logistic回歸。在這裡,我們有選擇地使用模型中的變量。但現在只是用五個變量來確定信用度的值。

LogisticModel<- glm(Credit ~ Account + Payment + Purp + Length.of.current + Sex, family = binomial, data = credit)

完成後,我們繼續將我們剛剛創建的模型擬合到測試集i_test1上,並準備進行第一次預測。

我們已經擬合了模型。現在我們將使用ROCR包來創建預測,並以曲線下面積(AUC)來衡量性能。AUC越大,說明我們的模型表現越好。

perf1 <- performance(pred1, 'tpr', 'fpr')

讓我們描繪一下結果。

我們將通過尋找AUC來結束這一部分。

AUCLog1

這不是一個糟糕的結果,但讓我們看看是否可以用不同的方法做得更好。

方法二:另一種Logistic模型

在這種方法中,我們將建立第二個Logistic邏輯模型來利用我們數據集中的所有變量。其步驟與上述第一個模型相同。

perf2 <- performance(pred2, 'tpr', 'fpr')

plot(perf2)

AUCLog2

包括所有的變量,我們並沒有得到多少改善。一個好的規則是儘可能保持模型的簡單。增加更多的變量會帶來很少的改善,所以堅持使用更簡單的模型。

點擊標題查閱往期內容

R語言用邏輯回歸、決策樹和隨機森林對信貸數據集進行分類預測

左右滑動查看更多

01

02

03

04

方法三:回歸樹

接下來,讓我們試著用回歸樹的方法來分析數據。我們的大部分代碼與上述邏輯模型中使用的代碼相似,但我們需要做一些調整。

請再次注意,我們正在研究我們模型中的所有變量,找到它們對我們感興趣的變量--信用度的影響。

TreeModel <- rpart(Creditability ~ ., data = credit[i_calibration1, ])

library(rpart.plot)

prp(TreeModel, type = 2, extra = 1)

perf3 <- performance(pred3, 'tpr', 'fpr')

plot(perf3)

考慮到我們的樹狀模型的複雜性,這些結果並不令人滿意,所以我們不得不再次懷疑第一個例子中更簡單的Logistic Regression模型是否更好。

方法四:隨機森林

與其建立一棵決策樹,我們可以使用隨機森林方法來創建一個決策樹 "森林"。在這種方法中,最終結果是類的模式(如果我們正在研究分類模型)或預測的平均值(如果我們正在研究回歸)。

隨機森林背後的想法是,決策樹很容易過度擬合,所以找到森林中的 "平均 "樹可以幫助避免這個問題。

你可以想像,這比創建一棵決策樹在計算上要求更高,但R可以很好地處理這一工作。

randomForest(Credit ~ )

通過努力,我們得到了一個有點改進的結果。隨機森林模型是我們所嘗試的四個模型中表現最好的。但是,這需要判斷結果是否值得付出額外的努力。

方法五:比較隨機森林和Logistic模型

好了,我們已經看了使用兩種基本分析方法的各種結果--邏輯回歸和決策樹。我們只看到了以AUC表示的單一結果。

隨機森林方法要求我們創建一個決策樹的森林,並取其模式或平均值。為什麼不利用所有這些數據呢?它們會是什麼樣子呢?

下面的代碼創建了一個圖表,描述了我們的隨機森林中每棵樹的AUC分數和邏輯模型的數百種組合。

首先我們需要一個函數來進行分析。

function(i){

i_test2 <- sample(1:nrow(credit), size = 333)

summary(LogisticModel.3)

fitLog3 <- predict(LogisticModel.3, type = 'response', newdata = credit[i_test2,

這部分代碼的運行需要一段時間,因為我們要對數百個單獨的結果進行列表和記錄。你可以通過改變VAUC對象中的計數來調整模型中的結果數量。在這裡,我們選擇計算200個x-y對,或400個單獨的結果。

plot(t(VC))

你可以看到,我們從前四個模型中得到的結果正好處於分布的中間。

這為我們證實了這些模型都是有可比性的。我們所希望的最好結果是AUC達到0.84,而且大多數人給我們的結果與我們已經計算的結果相似。

但是,讓我們試著更好地可視化。

首先,我們將對象轉換成一個數據框架。

我們創建幾個新圖。第一個是密度等高線圖。

plot(AA, aes(x = V1, y = V2)

第二張是高密度等高線圖,給我們提供了數據的機率區域。

with(AA, boxplot(V1, V2))

無論我們以何種方式描述我們的結果,都必須使用數據來做出合理的貸款決定。這裡有一個問題?

這些可能是我們使用這些模型所能得出的最佳分數,但這些結果對於確定貸款申請人的信用價值是否可以接受?這取決於貸款機構所使用的信用標準。

在最好的情況下,看起來我們的模型給了82%的機會向良好的信用風險提供貸款。對於每100萬元的貸款,我們最多可能期望得到82萬元的償還。平均而言,我們預計會收回大約78萬元的本金。換句話說,根據我們的分析,有75%到80%的機會重新獲得100萬元的貸款,這取決於我們使用的建模方法。

當我們把貸款申請人加入我們的資料庫時,如果我們要把他們視為良好的信貸風險,我們希望他們聚集在高密度圖的最暗區域。

除非我們收取大量的利息來彌補我們的損失,否則我們可能需要更好的模型。

點擊文末 「閱讀原文」

獲取全文完整資料。

本文選自《R語言邏輯回歸(Logistic Regression)、回歸決策樹、隨機森林信用卡違約分析信貸數據集》。

點擊標題查閱往期內容

PYTHON用戶流失數據挖掘:建立邏輯回歸、XGBOOST、隨機森林、決策樹、支持向量機、樸素貝葉斯和KMEANS聚類用戶畫像

Python對商店數據進行lstm和xgboost銷售量時間序列建模預測分析

PYTHON集成機器學習:用ADABOOST、決策樹、邏輯回歸集成模型分類和回歸和網格搜索超參數優化

R語言集成模型:提升樹boosting、隨機森林、約束最小二乘法加權平均模型融合分析時間序列數據

Python對商店數據進行lstm和xgboost銷售量時間序列建模預測分析

R語言用主成分PCA、 邏輯回歸、決策樹、隨機森林分析心臟病數據並高維可視化

R語言基於樹的方法:決策樹,隨機森林,Bagging,增強樹

R語言用邏輯回歸、決策樹和隨機森林對信貸數據集進行分類預測

spss modeler用決策樹神經網絡預測ST的股票

R語言中使用線性模型、回歸決策樹自動組合特徵因子水平

R語言中自編基尼係數的CART回歸決策樹的實現

R語言用rle,svm和rpart決策樹進行時間序列預測

python在Scikit-learn中用決策樹和隨機森林預測NBA獲勝者

python中使用scikit-learn和pandas決策樹進行iris鳶尾花數據分類建模和交叉驗證

R語言里的非線性模型:多項式回歸、局部樣條、平滑樣條、 廣義相加模型GAM分析

R語言用標準最小二乘OLS,廣義相加模型GAM ,樣條函數進行邏輯回歸LOGISTIC分類

R語言ISLR工資數據進行多項式回歸和樣條回歸分析

R語言中的多項式回歸、局部回歸、核平滑和平滑樣條回歸模型

R語言用泊松Poisson回歸、GAM樣條曲線模型預測騎自行車者的數量

R語言分位數回歸、GAM樣條曲線、指數平滑和SARIMA對電力負荷時間序列預測R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進行回歸、分類和動態可視化

如何用R語言在機器學習中建立集成模型?

R語言ARMA-EGARCH模型、集成預測算法對SPX實際波動率進行預測在python 深度學習Keras中計算神經網絡集成模型R語言ARIMA集成模型預測時間序列分析R語言基於Bagging分類的邏輯回歸(Logistic Regression)、決策樹、森林分析心臟病患者

R語言基於樹的方法:決策樹,隨機森林,Bagging,增強樹

R語言基於Bootstrap的線性回歸預測置信區間估計方法

R語言使用bootstrap和增量法計算廣義線性模型(GLM)預測置信區間

R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進行回歸、分類和動態可視化

Python對商店數據進行lstm和xgboost銷售量時間序列建模預測分析

R語言隨機森林RandomForest、邏輯回歸Logisitc預測心臟病數據和可視化分析

R語言用主成分PCA、 邏輯回歸、決策樹、隨機森林分析心臟病數據並高維可視化

Matlab建立SVM,KNN和樸素貝葉斯模型分類繪製ROC曲線

matlab使用分位數隨機森林(QRF)回歸樹檢測異常值

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