為何使用葉編碼的葉子數會那麼多?
老師你好,想請問為什麼我的葉子index有這麼多,但在fit rf的時候已經有限制樹的深度為3(一顆最多應該是有6片葉子?),謝謝~
回答列表
-
2019/05/27 下午 01:54陳明佑 (Ming You Chen)贊同數:0不贊同數:0留言數:1
np.unique(a) 是全部的葉點編號集合, 不是單棵葉點的編碼
單棵葉點的編碼是 np.unique(a[:,7]), 後面的數字7可以自行調整
每棵樹的葉點並不相同
剛剛把樹的內容印出來看, 可以發現 :
1. 這些編碼, 其實是節點生成的順序
2. 至於哪些節點是葉點編號, 這件事是看剛好編號到誰
例如 : 印出其中一棵樹的編碼 (sklearn.tree import.export_graphviz)
以及其對照樹的圖形如下 ( 將編碼轉貼至 http://webgraphviz.com/ )
可以看出剛剛說的兩件事
digraph Tree {
node [shape=box] ;
0 [label="X[2] <= 0.5\ngini = 0.482\nsamples = 145\nvalue = [132, 90]"] ;
1 [label="X[0] <= 0.75\ngini = 0.283\nsamples = 55\nvalue = [14, 68]"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="gini = 0.0\nsamples = 33\nvalue = [0, 48]"] ;
1 -> 2 ;
3 [label="X[6] <= 0.479\ngini = 0.484\nsamples = 22\nvalue = [14, 20]"] ;
1 -> 3 ;
4 [label="gini = 0.245\nsamples = 10\nvalue = [12, 2]"] ;
3 -> 4 ;
5 [label="gini = 0.18\nsamples = 12\nvalue = [2, 18]"] ;
3 -> 5 ;
6 [label="X[8] <= 0.401\ngini = 0.265\nsamples = 90\nvalue = [118, 22]"] ;
0 -> 6 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
7 [label="X[6] <= 0.136\ngini = 0.19\nsamples = 78\nvalue = [109, 13]"] ;
6 -> 7 ;
8 [label="gini = 0.444\nsamples = 10\nvalue = [10, 5]"] ;
7 -> 8 ;
9 [label="gini = 0.138\nsamples = 68\nvalue = [99, 8]"] ;
7 -> 9 ;
10 [label="X[3] <= 0.512\ngini = 0.5\nsamples = 12\nvalue = [9, 9]"] ;
6 -> 10 ;
11 [label="gini = 0.18\nsamples = 7\nvalue = [1, 9]"] ;
10 -> 11 ;
12 [label="gini = 0.0\nsamples = 5\nvalue = [8, 0]"] ;
10 -> 12 ;
}