簡體   English   中英

用R繪制決策樹

[英]Plot a decision tree with R

我有一個440 * 2矩陣,看起來像:

1   144
1   152
1   135
2   3
2   12
2   107
2   31
3   4
3   147
3   0
4   end
4   0
4   0
5   6
5   7
5   10
5   9

左列是起點,例如,在應用程序中,左側的所有1都位於同一頁面上。 他們導致三個選擇,第144,152,135頁。 然后,這些頁面可以各自通向另一頁面,依此類推,直到右列顯示“結束”為止。 我想要的是一種可視化這棵樹的比例的方法。 我意識到在行數為nb的情況下它會很大,因此可能不是圖形友好的,所以為了清楚起見,我想知道總共有多少條可能的路線(從每個起點開始,一直到給出的每個選項,以及每個終點的終點我意識到會有重疊,但這就是為什么我發現這個很難計算)。

其次,每個數字都有一個相關的標題。 我希望有一個函數,如果您輸入給定的標題,它將繪制所有可能的起點及其相關的路徑,並以此為起點。 這應該小很多,因此圖形友好。

例如

dta <- "
14  12  as
186  187  Frac
187  154  Low
23   52   Med
52   11   Lip
15  55  asd
11   42   AAA
42   154   BBB
154   end  Coll"

編輯的示例數據顯示某些分支未連接到所需樹

  dta <- "
  14  12  as
  186  187  Frac
  187  154  Low
  23   52   Med
  52   11   Lip
  11   42   AAA
  42   154   BBB
  154   end  Coll"

 dta <- gsub("   ", ",", dta, fixed = TRUE)   
 dta <- gsub("  ", ",", dta, fixed = TRUE)

df <- read.csv(textConnection(dta), stringsAsFactors = FALSE, header = FALSE)
names(df) <- c("from", "to", "nme")
library(data.tree)
Warning message:
package ‘data.tree’ was built under R version 3.2.5
tree <- FromDataFrameNetwork(df)
 **Error in FromDataFrameNetwork(df) :**
  **Cannot find root name. network is not a tree!**

我制作了這個示例,以顯示第1列如何導致第2列中的值,該值然后引用第1列中的值直到到達結尾。 不同的起點最終可能導致到達同一目的地的長度不同的路徑。 所以看起來像: 所有路徑通向Coll

所以在這里,我想看看如何從所有起點轉到“ Coll”

非常感謝任何幫助

如果確實有樹(例如沒有循環),則可以使用data.tree:

首先轉換為data.frame:

 dta <- "
14  12  as
186  187  Frac
187  154  Low
23   52   Med
52   11   Lip
15  55  asd
11   42   AAA
42   154   BBB
154   end  Coll
55  end  efg
12  end  hij"

dta <- gsub("   ", ",", dta, fixed = TRUE)
dta <- gsub("  ", ",", dta, fixed = TRUE)


df <- read.csv(textConnection(dta), stringsAsFactors = FALSE, header = FALSE)
names(df) <- c("from", "to", "nme")

現在,轉換為data.tree:

library(data.tree)
tree <- FromDataFrameNetwork(df)

tree$leafCount

現在,您可以導航到任何子樹,以進行分析和繪圖。 例如,使用以下任意一種可能性:

subTree <- tree$FindNode(187)
subTree <- Climb(tree, nme = "Coll", nme = "Low")
subTree <- tree$`154`$`187`

subTree <- Clone(tree$`154`)

也許您只需要打印:

print(subTree , "nme")

它將像這樣打印:

  levelName          nme
1 154                Coll
2  ¦--187             Low
3  ¦   °--186        Frac
4  °--42              BBB
5      °--11          AAA
6          °--52      Lip
7              °--23  Med

否則,請使用花式繪圖:

SetNodeStyle(subTree , style = "filled,rounded", shape = "box", fontname = "helvetica", label = function(node) node$nme, tooltip = "name")
plot(subTree , direction = "descend")

看起來像這樣:

在此處輸入圖片說明

暫無
暫無

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

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