logo
Loading...

為何使用葉編碼的葉子數會那麼多? - Cupoy

老師你好,想請問為什麼我的葉子index有這麼多,但在fit rf的時候已經有限制樹的深度為3(一顆...

ml100-2-d30,葉編碼

為何使用葉編碼的葉子數會那麼多?

2019/05/25 下午 03:28
機器學習共學討論版
簡佑珊
觀看數:13
回答數:1
收藏數:0
ml100-2-d30
葉編碼

老師你好,想請問為什麼我的葉子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 ;

    }