机器学习 决策树
目前无论是机器学习竞赛还是工业界,最流行、应用最广泛的xgboost其实是优化后的GBDT(LightGBM里面的boosting比较经典稳定的也是GBDT!),而GBDT的基分类器最常用的就是CART决策树!掌握决策树,对理解之后的GBDT、LightGBM都有大有裨益。
可视化的方式理解决策树,对深刻理解这个模型很有帮助。最熟知的决策树可视化实现方式是下面这种:
dot_data = export_graphviz(
clf,
out_file=None,
feature_names=df.columns[:-1],
class_names=["good", "bad"],
filled=True,
rounded=True,
special_characters=True,
)
graph2 = pydotplus.graph_from_dot_data(dot_data)
graph2.write_png("./pics/tree.png")
这种方法很好地展示了树的结构,但并不完美:
1、基尼系数会占用图中的空间,并且不利于解释
2、每个节点中各目标类别的样本数不够直观
介绍一个更为惊艳的决策树可视化库——dtreeviz
,直接看几张效果图
dtreeviz有以下特色:
- 利用有颜色的目标类别图例
- 叶子大小与该叶子中的样本数成正比
- 将≥和<用作边缘标签,看起来更清晰
- 决策节点利用堆叠直方图展示特征分布,每个目标类别都会用不同的颜色显示
- 在每个节点中各目标类别的样本数都用直方图的形式,这样可以提供更多信息
GraphViz配置指南
GraphViz是AT&T Lab开发的开源工具包,用于绘制dot语言脚本描述的图形,只需要关心点和边的关系,不需考虑布局、位置等,用来结合Python绘制图模型真是再好不过。
Graphviz 应用程序中有多种工具可以生成各种类型的图表(dot、neato、circo、twopi 等)。本文将重点介绍用于生成层级图的dot工具。
环境配置步骤:
1、首先下载安装包graphviz-2.38.msi,下载地址为graphviz官网
2、双击msi文件,然后一直选择next(默认安装路径为C:\Program Files (x86)\Graphviz2.38\),安装完成之后,会在windows开始菜单创建快捷信息。
3、配置环境变量:计算机→属性→高级系统设置→高级→环境变量→系统变量→path,在path中加入路径:
4、验证:在windows命令行界面,输入dot -version
,然后按回车,如果显示如下图所示的graphviz相关版本信息,则安装配置成功。
5、在C:/Users/H.X.X/anaconda3/Lib/site-packages找到pydot.py这个文件,在spyder里面用Ctrl+F搜索self.prog,把self.prog=‘dot’改成’dot.exe’,保存。一共会搜出六个结果,只需要改这一处就好。
6、安装graphviz和pydotplus的python模块, 它的安装和安装普通的模块一样, 就是使用pip:
7、在Python终端测试,配置完毕
CART@GraphViz可视化
from sklearn.datasets import load_iris
from sklearn import tree
import pydotplus
import sys
import os
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
from IPython.display import Image
dot_data = tree.export_graphviz(clf, out_file=None,
feature_names=iris.feature_names,
class_names=iris.target_names,
filled=True, rounded=True,
special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png())
除叶节点(终端节点)之外的所有节点都有 5 部分
- 基于一个特征的值的有关数据的问题。每个问题的答案要么是 True,要么就是 False。数据点会根据该问题的答案在该决策树中移动。
- gini:节点的基尼不纯度。当沿着树向下移动时,平均加权的基尼不纯度必须降低。
- samples:节点中观察的数量。
- value:每一类别中样本的数量。比如,顶部节点中有 2 个样本属于类别 0,有 4 个样本属于类别 1。
- class:节点中大多数点的类别(持平时默认为 0)。在叶节点中,这是该节点中所有样本的预测结果。
GraphViz 搞定后,安装dtreeviz即可
使用也很简单pip install dtreeviz # install dtreeviz for sklearn
pip install dtreeviz[xgboost] # install XGBoost related dependency
pip install dtreeviz[pyspark] # install pyspark related dependency
pip install dtreeviz[lightgbm] # install LightGBM related dependency