2018年1月18日 星期四

XGBoost (python3.5) (windows) (anaconda) plot_tree 修正

windows anaconda下載的XGBoost
plot_tree default function畫出來只會顯示
f0, f1, f2......作為feature的切割
如上圖



參考了網路上的做法, 做了修正


1. 首先要建立一個fmap的文件

def ceate_feature_map(features):
    outfile = open('xgb.fmap', 'w')
    i = 0
    for feat in features:
        outfile.write('{0}\t{1}\tq\n'.format(i, feat))
        i = i + 1
    outfile.close()

ceate_feature_map(features_name)

這個features_name也就是你input data的title

2. 改寫plot_tree

原先的
plot_tree(xgbmodel, rankdir='LR')
後來的plot_tree多加一個引數
plot_tree(xgbmodel, rankdir='LR', fmap='xgb.fmap')

在網路上google到的大致上是這樣, 一般都說更新到最新版就有支援fmap這個功能
但是我這樣用了, 而且xgboost也是6.0版本
仍然不能使用
於是進去裡面看plot_tree裡面到底有沒有吃到fmap這個參數
最後

3. 改寫plotting裡面的to_graphviz function

原先的
tree = booster.get_dump()[num_trees]
完全沒有吃到fmap這個參數
建議可以改成這樣
if "fmap" in kwargs:
        tree = booster.get_dump(kwargs["fmap"])[num_trees]
    else:
        tree = booster.get_dump()[num_trees]

這樣畫出來的tree就能夠含有feature name的information了


其餘XGBoost入門詳解, 我認為這篇蠻值得參考的
https://hk.saowen.com/a/24b56c2fdf62f1a70dfa8e2f00917904097a9425225daf98526ea3d6293370db

XGBoost (python3.5) (windows) (anaconda) plot_tree 修正

windows anaconda下載的XGBoost plot_tree default function畫出來只會顯示 f0, f1, f2......作為feature的切割 如上圖 參考了網路上的做法, 做了修正 1. 首先要建立一個fmap的文件 ...