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


原文鏈接:http://tecdat.cn/?p=17950 

 

在本文中,我們使用了邏輯回歸、決策樹和隨機森林模型來對信用數據集進行分類預測並比較了它們的性能。數據集是

credit=read.csv("german_credit.csv", header = TRUE, sep = ",")

看起來所有變量都是數字變量,但實際上,大多數都是因子變量,

  1.  
    > str(credit)
  2.  
    'data.frame': 1000 obs. of 21 variables:
  3.  
    $ Creditability : int 1 1 1 1 1 1 1 1 1 1 ...
  4.  
    $ Account.Balance : int 1 1 2 1 1 1 1 1 4 2 ...
  5.  
    $ Duration : int 18 9 12 12 12 10 8 ...
  6.  
    $ Purpose : int 2 0 9 0 0 0 0 0 3 3 ...

讓我們將分類變量轉換為因子變量,

  1.  
    > F=c(1,2,4,5,7,8,9,10,11,12,13,15,16,17,18,19,20)
  2.  
    > for(i in F) credit[,i]=as.factor(credit[,i])

現在讓我們創建比例為1:2 的訓練和測試數據集

  1.  
    > i_test=sample(1:nrow(credit),size=333)
  2.  
    > i_calibration=(1:nrow(credit))[-i_test]

我們可以擬合的第一個模型是對選定協變量的邏輯回歸

  1.  
    > LogisticModel <- glm(Creditability ~ Account.Balance + Payment.Status.of.Previous.Credit + Purpose +
  2.  
    Length.of.current.employment +
  3.  
    Sex...Marital.Status, family=binomia

基於該模型,可以繪制ROC曲線並計算AUC(在新的驗證數據集上)

  1.  
     
  2.  
    > AUCLog1=performance(pred, measure = "auc")@y.values[[1]]
  3.  
    > cat("AUC: ",AUCLog1,"\n")
  4.  
    AUC: 0.7340997

一種替代方法是考慮所有解釋變量的邏輯回歸

  1.  
    glm(Creditability ~ .,
  2.  
    + family=binomial,
  3.  
    + data = credit[i_calibrat

我們可能在這里過擬合,可以在ROC曲線上觀察到

  1.  
     
  2.  
    > perf <- performance(pred, "tpr", "fpr
  3.  
    > AUCLog2=performance(pred, measure = "auc")@y.values[[1]]
  4.  
    > cat("AUC: ",AUCLog2,"\n")
  5.  
    AUC: 0.7609792

 

與以前的模型相比,此處略有改善,后者僅考慮了五個解釋變量。

現在考慮回歸樹模型(在所有協變量上)

我們可以使用

> prp(ArbreModel,type=2,extra=1)

 

模型的ROC曲線為

  1.  
    (pred, "tpr", "fpr")
  2.  
    > plot(perf)
  3.  
     
  4.  
    > cat("AUC: ",AUCArbre,"\n")
  5.  
    AUC: 0.7100323

 

不出所料,與邏輯回歸相比,模型性能較低。一個自然的想法是使用隨機森林優化。

  1.  
    > library(randomForest)
  2.  
    > RF <- randomForest(Creditability ~ .,
  3.  
    + data = credit[i_calibration,])
  4.  
    > fitForet <- predict(RF,
  5.  
     
  6.  
    > cat("AUC: ",AUCRF,"\n")
  7.  
    AUC: 0.7682367

 

在這里,該模型(略)優於邏輯回歸。實際上,如果我們創建很多訓練/驗證樣本並比較AUC,平均而言,隨機森林的表現要比邏輯回歸好,

  1.  
    > AUCfun=function(i){
  2.  
    + set.seed(i)
  3.  
    + i_test=sample(1:nrow(credit),size=333)
  4.  
    + i_calibration=(1:nrow(credit))[-i_test]
  5.  
     
  6.  
     
  7.  
    + summary(LogisticModel)
  8.  
    + fitLog <- predict(LogisticModel,type="response",
  9.  
    + newdata=credit[i_test,])
  10.  
    + library(ROCR)
  11.  
    + pred = prediction( fitLog, credit$Creditability[i_test])
  12.  
     
  13.  
    + RF <- randomForest(Creditability ~ .,
  14.  
    + data = credit[i_calibration,])
  15.  
     
  16.  
     
  17.  
    + pred = prediction( fitForet, credit$Creditability[i_test])
  18.  
     
  19.  
    + return(c(AUCLog2,AUCRF))
  20.  
    + }
  21.  
    > plot(t(A))

 


最受歡迎的見解

1.從決策樹模型看員工為什么離職

2.R語言基於樹的方法:決策樹,隨機森林

3.python中使用scikit-learn和pandas決策樹

4.機器學習:在SAS中運行隨機森林數據分析報告

5.R語言用隨機森林和文本挖掘提高航空公司客戶滿意度

6.機器學習助推快時尚精准銷售時間序列

7.用機器學習識別不斷變化的股市狀況——隱馬爾可夫模型的應用

8.python機器學習:推薦系統實現(以矩陣分解來協同過濾)

9.python中用pytorch機器學習分類預測銀行客戶流失

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM