Xgboost的可视化接口,特征重要性图以及画出决策树
xgboost自带的特征重要性排名以及可视化: plot_importance
import xgboost
from xgboost import XGBClassifier
from sklearn.datasets import load_iris
iris = load_iris()
x, y = iris.data, iris.target
model = XGBClassifier()
model.fit(x, y)
# 如果输入是没有表头的array,会自动以f1,f2开始,需要更换表头
# 画树结构图的时候也需要替换表头
model.get_booster().feature_names = iris.feature_names
# max_num_features指定排名最靠前的多少特征
# height=0.2指定柱状图每个柱子的粗细,默认是0.2
# importance_type='weight'默认是用特征子树中的出现次数(被选择次数),还有"gain"和"cover"
xgboost.plot_importance(model, max_num_features=5)
# f_score就是feature score
image.png
plot_importance中的表头,实际上是调用的booster的get_score()的接口
model.get_booster().get_score()
# {'f2': 136, 'f3': 146, 'f0': 106, 'f1': 90}
修改表头
model.get_booster().feature_names = iris.feature_names
model.get_booster().get_score()
# {'petal length (cm)': 136,
# 'petal width (cm)': 146,
# 'sepal length (cm)': 106,
# 'sepal width (cm)': 90}
ubuntu系统下xgboost画出树结构: to_graphviz
需要下载graphviz
pip install graphviz
sudo apt-get install graphviz # ubuntu系统也需要安装graphviz
xgboost.to_graphviz(model, num_trees=2) # 索引第2棵树
第2棵树.png
修改图形参数,设置leaf_node_params为不用文本框的纯文本
xgboost.to_graphviz(model, num_trees=1, leaf_node_params={'shape': 'plaintext'})
第1棵树.png
使用dump_model导出迭代工程,配合to_graphviz解释
model.get_booster().dump_model("model.txt")
第一个树的分割逻辑
booster[0]:
0:[petal length (cm)<2.45000005] yes=1,no=2,missing=1
1:leaf=0.430622011
2:leaf=-0.220048919
leaf_value转化为预测概率
leaf_value实际上是这个节点的交叉熵值: 1 / (1 + np.exp(-x))
以第2棵树为例, 第二层的叶子节点
左节点预测概率1 / (1 + np.exp(0.2198)) = 0.445,
右节点的预测概率1 / (1 + np.exp(-0.217)) = 0.554
0.445 + 0.554 = 1
windows系统下xgboost画出树结构: to_graphviz
pip install graphviz
pip install pydot
下载windows下graphviz的zip文件
https://graphviz.gitlab.io/_pages/Download/Download_windows.html
代码中增加环境变量
import os
os.environ["path"] += os.pathsep + "E:\pge\pip_package\release\bin"
scr = xgboost.to_graphviz(model, num_trees=2)
# src.format = "jpg"
src.view("influence_factor/tree") # 图片保存到位置
graphviz不能显示中文的解决方案
打开tree文件,在第二行 graph [ rankdir = TB ] 下面加入
node [fontname="FangSong"]
使用dot命令重新生成图片
dot Tjpg tree -o tree.jpg