日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于R语言分析决策树和随机森林(1)

發布時間:2024/8/1 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于R语言分析决策树和随机森林(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

決策樹和隨機森林是機器學習的一個重要內容。今天主要來說說決策樹,決策樹分為傳統的決策樹和條件決策樹,傳統決策樹(rpart包實現)主要是基于:基尼不純度(Gini Impurity)或信息增益(Information Gain)等標準對節點進行遞歸分割。條件決策樹會根據條件分布測量變量與響應值(分類)之間的相關關系,選擇分割節點中要使用的變量,可以改善rpart包過度擬合的問題。今天我們主要來聊聊條件決策樹,假如你是一個銀行的經理,有客戶來向你貸款,對于還款能力強(低風險)的客戶,你肯定愿意貸款給他,而對于還款能力差(高風險)的客戶,你肯定不愿意貸款給他。那么,我們怎么評定對一個客戶進行風險評估呢,肯定是基于既往的數據根據他的職業、收入、負債、資產等等做評估,大概就是下圖這樣做了一個分類的決策,我們的決策樹大概就是這樣的一個操作原理 ,等于機器算法幫你做了決策。

我們今天來使用SPSS自帶的一個銀行1500例客戶進行風險劃分的數據集,來做一個條件決策樹,R語言需要使用到party、caret、pROC、foreign包需要事先下載好
我們先導入數據看下數據結構

library(foreign) library(pROC) library(party) library(caret) library(ggplot2) bc <- read.spss("E:/r/test/bankloan_cs.sav",use.value.labels=F, to.data.frame=T)



前面3項是ID號,后面3項是預測概率和權重,我們先不理他。我們來看看中間的項目指標:Age年齡,ed教育程度,employ在職雇主的年限,address在這個地方住的時間income收入,debtinc債務收入比,creddebt信用卡債務,othdebt其他債務,最后一個default是我們的結局指標,即是否是高風險客戶。
其中ed教育程度、default是分類變量,我們要進行轉換一下

bc$default<-as.factor(bc$default) bc$ed<-as.factor(bc$ed)

接下來要把數據分成預測集和驗證集(就是一個建模,一個驗證),要先設一個種子,這樣有可重復性

###建立預測和驗證集 sub<-sample(1:nrow(bc),round(nrow(bc)*2/3)) length(sub) data_train<-bc[sub,]#取2/3的數據做訓練集 data_test<-bc[-sub,]#取1/3的數據做測試集 ###訓練集建立模型 fit<-ctree(default ~age+ed+employ+address+income+debtinc+creddebt+othdebt,data=data_train,controls = ctree_control(maxsurrogate = 3)) fit plot(fit)

得到如下結果,可以看到第一級的分支從debtinc債務收入比是否大于16進行分割

表不好理解的話看圖就容易理解多了,債務比大于16的對工作年限進行了劃分,小于6年的就是高風險人群,屬于不能貸款類型。

接下來我們進行交叉驗證評估模型的驗證能力,先在驗證集生成預測模型的概率

ctree.predict = predict(fit,data_test)##驗證集生成預測概率 bd<-table(ctree.predict,data_test$default)#以表格形式表示 bd


我們可以看到預測0還是挺準的,1就差點了,通過混淆矩陣可以計算出AUC和95%CI

confusionMatrix(bd)##通過混淆矩陣來計算AUC


我們還可以通過treeresponse函數把概率提取出來

tr = treeresponse(fit,newdata =data_test )##利用treeresponse提取概率 be<-do.call(rbind.data.frame,tr)##把列表變成數據框形式 colnames(be)<-c("yes","no")#數據太長,重新命名 roc2<-roc(data_test$default,be$no)##生成驗證隊列AUC,有人可能要問這里為什么用no,不用yes,其實都是一樣的 round(auc(roc2),3)##AUC round(ci(roc2),3)##95%CI plot(1-roc2$specificities,roc2$sensitivities,col="red",lty=1,lwd=2,type = "l",xlab = "specificities",ylab = "sensitivities") abline(0,1) legend(0.7,0.3,c("auc=0.753","ci:0.711-0.759"),lty=c(1),lwd=c(2),col="red",bty = "n")


和混淆矩陣算出來的AUC差不多,稍微高了一點,我看別人算也是高了一點,個人感覺這樣提取概率算出來更加準確,決策樹由于隨機性導致誤差稍高,我們可以通過隨機森林來減少誤差和優化模型,下節將繼續介紹隨機森林。
更多精彩文章請關注公眾號:零基礎說科研

總結

以上是生活随笔為你收集整理的基于R语言分析决策树和随机森林(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。