【R言語】ランダムフォレストrangerパッケージ 変数の重要度を可視化
rangerパッケージにおける変数重要度の可視化
kefism.hatenablog.com
こちらの関数がうまく動かなかったため改造して、関数を作成した。
library(tidyverse) library(ranger) # random sampling df <- diamonds str(df) n <- nrow(df) s <- sample(n, n * 0.7) df_train <- df[s,] df_test <- df[-s,] rf_ranger <- ranger( formula = price ~. , data = df_train , num.tree = 50, mtry = 3,#best = 6 importance = 'impurity' ) #関数作成 plotVarImp <- function(ranger_fit, top=NULL){ library(ggplot2) #追記 これがないとエラー? n <-length(ranger_fit$variable.importance) pd <- data.frame(Variable = names(ranger_fit$variable.importance[1:n]), Importance = as.numeric(ranger_fit$variable.importance[1:n])) %>% arrange(desc(Importance)) if(is.null(top)){ pd <- arrange(pd, Importance) } else { pd <- arrange(pd[1:top,], Importance) } p <- ggplot(pd, aes(x=factor(Variable, levels=unique(Variable)), y=Importance)) + geom_bar(stat="identity") + xlab("Variables") + coord_flip() plot(p) } plotVarImp(rf_ranger) g1 <- plotVarImp(rf_ranger) rf_ranger2 <- ranger( formula = price ~. , data = df_train , num.tree = 50, mtry = 3,#best = 6 importance = 'permutation' ) g2 <- plotVarImp(rf_ranger2) library("gridExtra") grid.arrange(g1,g2,ncol = 2) # 2列に並べる
グラフの見方
ランダムフォレストの変数重要度は
Gini不純度と順序入れ替え(permutation)に基づく2種類がある。
この二つグラフの上位の変数が全く入れ替わっている場合は、
モデルとして安定していないと判断できる。