簡體   English   中英

如何使用R在隨機森林中生成決策樹圖和變量重要性圖?

[英]How do I generate a Decision Tree plot and a Variable Importance plot in Random Forest using R?

我是數據科學的新手,我正在使用隨機森林算法進行分類的機器學習分析。 我在數據集中的目標變量稱為損耗(是/否)。

對於如何在Random Fores中生成這2個圖,我有些困惑:

(1) Feature Importance Plot

(2) Decision Tree Plot

我了解到,隨機森林是數據集中幾個決策樹模型的集合。

假設我的訓練數據集稱為TrainDf而我的測試數據集稱為TestDf ,如何在R中創建這2個圖?

更新:從這兩篇文章看來,他們無法完成,還是我在這里錯過了什么? 為什么帶有一棵樹的隨機森林比決策樹分類器好得多?

您將如何解釋整體樹模型?

要繪制變量重要性,可以使用以下代碼。

mtcars.rf <- randomForest(am ~ ., data=mtcars, ntree=1000, keep.forest=FALSE,
                      importance=TRUE)
varImpPlot(mtcars.rf)

具有ggplot2 特征重要性圖

library(randomForest)
library(ggplot2)
mtcars.rf <- randomForest(vs ~ ., data=mtcars)
imp <- cbind.data.frame(Feature=rownames(mtcars.rf$importance),mtcars.rf$importance)
g <- ggplot(imp, aes(x=reorder(Feature, -IncNodePurity), y=IncNodePurity))
g + geom_bar(stat = 'identity') + xlab('Feature')

在此處輸入圖片說明

決策樹情節igraph (從隨機森林樹)

tree <- randomForest::getTree(mtcars.rf, k=1, labelVar=TRUE) # get the 1st decision tree with k=1
tree$`split var` <- as.character(tree$`split var`)
tree$`split point` <- as.character(tree$`split point`)
tree[is.na(tree$`split var`),]$`split var` <- ''
tree[tree$`split point` == '0',]$`split point` <- ''

library(igraph)
gdf <- data.frame(from = rep(rownames(tree), 2),
                          to = c(tree$`left daughter`, tree$`right daughter`))
g <- graph_from_data_frame(gdf, directed=TRUE)
V(g)$label <- paste(tree$`split var`, '\r\n(', tree$`split point`, ',', round(tree$prediction,2), ')')
g <- delete_vertices(g, '0')
print(g, e=TRUE, v=TRUE)
plot(g, layout = layout.reingold.tilford(g, root=1), vertex.size=5, vertex.color='cyan')

從下圖可以看出,決策樹中每個節點的標簽表示在該節點選擇用於拆分的變量名稱(拆分值,帶有標簽1的類的比例)。

在此處輸入圖片說明

同樣,可以通過randomForest::getTree()函數使用k=100獲得第100棵樹,如下所示

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM