Dans la dernière section, nous avons parlé des arbres de décision. Aujourd'hui, nous allons parler de forêt aléatoire. L'algorithme de forêt aléatoire a été très populaire ces deux dernières années. Je viens de consulter la littérature. Tant qu'il implique une forêt aléatoire, vous pouvez Envoyez quelques mots de BB. Pour un papier chinois ou dual-core, autant vous engager dans une forêt aléatoire maintenant. Le temps n'attend pas, alors qu'attendez-vous?
La forêt aléatoire a été proposée par Breiman en 2001. Elle résout le problème de la colinéarité dans la régression logistique. Elle comprend un algorithme d'estimation des valeurs manquantes. Si une partie des données est manquante, elle peut encore conserver un certain degré de précision. L'algorithme de l'arbre de classification dans la forêt aléatoire inclut naturellement l'interaction des variables, il n'a donc pas besoin de vérifier si l'interaction et la non-linéarité des variables sont significatives. Dans la plupart des cas, les paramètres par défaut des paramètres du modèle peuvent donner des résultats optimaux ou presque optimaux.
La forêt aléatoire peut être simplement comprise comme un grand nombre de numéros de décision par vote de classification. Le principe est à peu près le suivant: un échantillonnage aléatoire de l'ensemble d'apprentissage est effectué avec remplacement, et plusieurs échantillons obtenus forment un sous-ensemble de l'ensemble d'apprentissage en tant que nouvel ensemble d'apprentissage. Ensuite, extrayez au hasard p caractéristiques de l'ensemble d'apprentissage à partir du nouvel ensemble d'apprentissage généré pour former un sous-ensemble, et utilisez le sous-ensemble pour former un arbre de décision sans l'élaguer. Répétez ce processus jusqu'à ce que n arbres de décision soient formés, classez les échantillons de test à classer pour chaque arbre de décision, comptez les résultats de classification de chaque arbre de décision et utilisez la catégorie reconnue par le plus grand arbre de décision comme résultat de classification final.
Nous continuons à utiliser les dernières données pour la forêt aléatoire. Nous avons besoin de randomForest, pROC, de packages étrangers, nous importons d'abord les données et visualisons les variables
library(randomForest)
library(pROC)
library(foreign)
bc <- read.spss("E:/r/test/bankloan_cs.sav",
use.value.labels=F, to.data.frame=T)
names(bc)
Supprimez certaines des variables redondantes
bc <-bc [, c (-1: -3, -13: -15, -5)] pour
obtenir les données suivantes
Âge âge, années d'emploi de l'employeur employé, adresse habitée à cet endroit, revenu Revenu, ratio dette / revenu de la dette, dette de carte de crédit de la dette, autres dettes, autres dettes, le dernier défaut est notre indicateur de résultat, c'est-à-dire s'il s'agit d'un client à haut risque.
Divisez les données en un ensemble d'apprentissage et un ensemble de prédictions (c'est-à-dire une modélisation et une vérification), et une graine doit être définie en premier, afin qu'il y ait répétabilité
###设置训练和预测集
set.seed(1)
index <- sample(2,nrow(bc),replace = TRUE,prob=c(0.7,0.3))
traindata <- bc[index==1,]
testdata <- bc[index==2,]
###拟合随机森林模型,默认的mtry的值是自变量除以3
def_ntree<- randomForest(default ~age+employ+address+income+debtinc+creddebt
+othdebt,data=traindata,
ntree=500,important=TRUE,proximity=TRUE)
Je pense que l'erreur de modèle est encore assez importante
plot(def_ntree)##画图
L'image montre que 500 branches d'arbres ont été atteintes et l'erreur a très peu changé. Vous pouvez également utiliser le code suivant pour trouver l'arbre avec la plus petite erreur, mais je pense qu'il est plus fiable de regarder l'image
which.min(def_ntree $err.rate[,1])### 最小误差的树
Nous créons une donnée client par simulation aléatoire et jugeons le système
newdata1<-data.frame(age=30,employ=5,address=2,income=100,
debtinc=5.2,creddebt=0.3,othdebt=0.2)
predict(def_ntree,newdata1)
Le système est considéré comme un client à haut risque. S'il s'agit d'un indicateur de résultat à trois catégories, vous pouvez également utiliser la grammaire suivante pour l'analyse des probabilités et le vote
predict(def_ntree,newdata1,type = "prob")
Examinez les indicateurs importants liés au modèle et obtenez les indicateurs les plus importants qui affectent le modèle grâce à des scores et des diagrammes. On peut voir que le ratio dette / revenu est le plus important, ce qui est le même que l'arbre de décision jugement.
importance(def_ntree)
varImpPlot(def_ntree)
Si nous voulons connaître l'impact de l'indicateur de ratio dette / revenu le plus influent sur l'indicateur de résultat, la figure ci-dessous montre que les revenus de la dette supérieurs à 30 peuvent facilement être considérés comme un client à haut risque.
partialPlot(def_ntree,traindata,debtinc,"0",xlab = "debtinc",ylab = "Variabl effect")
Enfin, vérifiez le modèle via l'ensemble de validation
def_pred<-predict(def_ntree, newdata=testdata)##生成概率
roc<-multiclass.roc (as.ordered(testdata$default) ,as.ordered(def_pred))#拟合ROC
roc1<-roc(as.ordered(testdata$default) ,as.ordered(def_pred))
round(auc(roc1),3)##AUC
round(ci(roc1),3)##95%CI
plot(roc1)
plot(roc1,print.auc=T, auc.polygon=T, grid=c(0.1, 0.2), grid.col=c("green","red"),
max.auc.polygon=T, auc.polygon.col="skyblue",print.thres=T)
Il peut également être dessiné comme ceci
plot(1-roc1$specificities,roc1$sensitivities,col="red",
lty=1,lwd=2,type = "l",xlab = "specificities",ylab = "sensitivities")
abline(0,1)
legend(0.7,0.3,c("AUC=0.82"),lty=c(1),lwd=c(2),col="red",bty = "n")
références:
- Description aléatoire de la forêt de R
- Tang Dawei. Recherche sur le modèle de prévision du ruissellement quotidien basé sur la forêt aléatoire et sa mise en œuvre en langage R. [J]. Heilongjiang Water Conservancy Science and Technology, 2019 (12).
- Zheng Zhiwei, Qiu Jialing, Yang Qingling, Gong Xiaochun, Guo Shanqing, Jia Zhongwei, Hao Chun.L'application de la forêt aléatoire à l'analyse des sentiments du texte et la mise en œuvre du logiciel R [J] .Médecine préventive moderne, 2018,45 (8) : 1345-1348,1353.
- Li Xinhai.L'application du modèle de forêt aléatoire dans l'analyse de classification et de régression [J] .Acta Applied Entomology, 2013,50 (4): 1190-1197. Pour
des articles plus passionnants, veuillez faire attention au numéro public: Zero-Basic Research