R語(yǔ)言用邏輯回歸、決策樹(shù)和隨機(jī)森林對(duì)信貸數(shù)據(jù)集進(jìn)行分類(lèi)預(yù)測(cè)
原文鏈接:http://tecdat.cn/?p=17950?
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
?
在本文中,我們使用了邏輯回歸、決策樹(shù)和隨機(jī)森林模型來(lái)對(duì)信用數(shù)據(jù)集進(jìn)行分類(lèi)預(yù)測(cè)并比較了它們的性能。數(shù)據(jù)集是
credit=read.csv("german_credit.csv", header = TRUE, sep = ",")
看起來(lái)所有變量都是數(shù)字變量,但實(shí)際上,大多數(shù)都是因子變量,
> str(credit)
'data.frame': 1000 obs. of ?21 variables:
$ Creditability ? : int ?1 1 1 1 1 1 1 1 1 1 ...
$ Account.Balance : int ?1 1 2 1 1 1 1 1 4 2 ...
$ Duration ? ? ? ?: int ?18 9 12 12 12 10 8 ?...
$ Purpose ? ? ? ? : int ?2 0 9 0 0 0 0 0 3 3 ...
讓我們將分類(lèi)變量轉(zhuǎn)換為因子變量,
> F=c(1,2,4,5,7,8,9,10,11,12,13,15,16,17,18,19,20)
> for(i in F) credit[,i]=as.factor(credit[,i])
現(xiàn)在讓我們創(chuàng)建比例為1:2 的訓(xùn)練和測(cè)試數(shù)據(jù)集
> i_test=sample(1:nrow(credit),size=333)
> i_calibration=(1:nrow(credit))[-i_test]
我們可以擬合的第一個(gè)模型是對(duì)選定協(xié)變量的邏輯回歸
> LogisticModel <- glm(Creditability ~ Account.Balance + Payment.Status.of.Previous.Credit + Purpose +
Length.of.current.employment +
Sex...Marital.Status, family=binomia
基于該模型,可以繪制ROC曲線并計(jì)算AUC(在新的驗(yàn)證數(shù)據(jù)集上)
> AUCLog1=performance(pred, measure = "auc")@y.values[[1]]
> cat("AUC: ",AUCLog1,"\n")
AUC: ?0.7340997

一種替代方法是考慮所有解釋變量的邏輯回歸
glm(Creditability ~ .,
+ ?family=binomial,
+ ?data = credit[i_calibrat
我們可能在這里過(guò)擬合,可以在ROC曲線上觀察到
> perf <- performance(pred, "tpr", "fpr
> AUCLog2=performance(pred, measure = "auc")@y.values[[1]]
> cat("AUC: ",AUCLog2,"\n")
AUC: ?0.7609792

?
與以前的模型相比,此處略有改善,后者僅考慮了五個(gè)解釋變量。
現(xiàn)在考慮回歸樹(shù)模型(在所有協(xié)變量上)
我們可以使用
> prp(ArbreModel,type=2,extra=1)

?
模型的ROC曲線為
(pred, "tpr", "fpr")
> plot(perf)
> cat("AUC: ",AUCArbre,"\n")
AUC: ?0.7100323

?
不出所料,與邏輯回歸相比,模型性能較低。一個(gè)自然的想法是使用隨機(jī)森林優(yōu)化。
> library(randomForest)
> RF <- randomForest(Creditability ~ .,
+ data = credit[i_calibration,])
> fitForet <- predict(RF,
> cat("AUC: ",AUCRF,"\n")
AUC: ?0.7682367

?
在這里,該模型(略)優(yōu)于邏輯回歸。實(shí)際上,如果我們創(chuàng)建很多訓(xùn)練/驗(yàn)證樣本并比較AUC,平均而言,隨機(jī)森林的表現(xiàn)要比邏輯回歸好,
> AUCfun=function(i){
+ ? set.seed(i)
+ ? i_test=sample(1:nrow(credit),size=333)
+ ? i_calibration=(1:nrow(credit))[-i_test]
+ ? summary(LogisticModel)
+ ? fitLog <- predict(LogisticModel,type="response",
+ ? ? ? ? ? ? ? ? ? ? newdata=credit[i_test,])
+ ? library(ROCR)
+ ? pred = prediction( fitLog, credit$Creditability[i_test])
+ ? RF <- randomForest(Creditability ~ .,
+ ? data = credit[i_calibration,])
+ ? pred = prediction( fitForet, credit$Creditability[i_test])
+ ? return(c(AUCLog2,AUCRF))
+ }
> plot(t(A))
?


最受歡迎的見(jiàn)解
1.從決策樹(shù)模型看員工為什么離職
2.R語(yǔ)言基于樹(shù)的方法:決策樹(shù),隨機(jī)森林
3.python中使用scikit-learn和pandas決策樹(shù)
4.機(jī)器學(xué)習(xí):在SAS中運(yùn)行隨機(jī)森林?jǐn)?shù)據(jù)分析報(bào)告
5.R語(yǔ)言用隨機(jī)森林和文本挖掘提高航空公司客戶滿意度
6.機(jī)器學(xué)習(xí)助推快時(shí)尚精準(zhǔn)銷(xiāo)售時(shí)間序列
7.用機(jī)器學(xué)習(xí)識(shí)別不斷變化的股市狀況——隱馬爾可夫模型的應(yīng)用
8.python機(jī)器學(xué)習(xí):推薦系統(tǒng)實(shí)現(xiàn)(以矩陣分解來(lái)協(xié)同過(guò)濾)
9.python中用pytorch機(jī)器學(xué)習(xí)分類(lèi)預(yù)測(cè)銀行客戶流失
?