机器学习 决策树
目前无论是机器学习竞赛还是工业界,最流行、应用最广泛的xgboost其实是优化后的GBDT(LightGBM里面的boosting比较经典稳定的也是GBDT!),而GBDT的基分类器最常用的就是CART决策树!掌握决策树,对理解之后的GBDT、LightGBM都有大有裨益。
可视化的方式理解决策树,对深刻理解这个模型很有帮助。最熟知的决策树可视化实现方式是下面这种:

  1. dot_data = export_graphviz(
  2. clf,
  3. out_file=None,
  4. feature_names=df.columns[:-1],
  5. class_names=["good", "bad"],
  6. filled=True,
  7. rounded=True,
  8. special_characters=True,
  9. )
  10. graph2 = pydotplus.graph_from_dot_data(dot_data)
  11. graph2.write_png("./pics/tree.png")

决策树可视化 - 图1
这种方法很好地展示了树的结构,但并不完美:
1、基尼系数会占用图中的空间,并且不利于解释
2、每个节点中各目标类别的样本数不够直观
介绍一个更为惊艳的决策树可视化库——dtreeviz,直接看几张效果图决策树可视化 - 图2决策树可视化 - 图3决策树可视化 - 图4
dtreeviz有以下特色:

  • 利用有颜色的目标类别图例
  • 叶子大小与该叶子中的样本数成正比
  • 将≥和<用作边缘标签,看起来更清晰
  • 决策节点利用堆叠直方图展示特征分布,每个目标类别都会用不同的颜色显示
  • 在每个节点中各目标类别的样本数都用直方图的形式,这样可以提供更多信息

dtreeviz同样依赖GraphViz,其安装配置方法:

GraphViz配置指南

GraphViz是AT&T Lab开发的开源工具包,用于绘制dot语言脚本描述的图形,只需要关心点和边的关系,不需考虑布局、位置等,用来结合Python绘制图模型真是再好不过。
决策树可视化 - 图5
Graphviz 应用程序中有多种工具可以生成各种类型的图表(dot、neato、circo、twopi 等)。本文将重点介绍用于生成层级图的dot工具。
环境配置步骤:
1、首先下载安装包graphviz-2.38.msi,下载地址为graphviz官网决策树可视化 - 图6
2、双击msi文件,然后一直选择next(默认安装路径为C:\Program Files (x86)\Graphviz2.38\),安装完成之后,会在windows开始菜单创建快捷信息。
决策树可视化 - 图7
3、配置环境变量:计算机→属性→高级系统设置→高级→环境变量→系统变量→path,在path中加入路径:
决策树可视化 - 图8
4、验证:在windows命令行界面,输入dot -version,然后按回车,如果显示如下图所示的graphviz相关版本信息,则安装配置成功。
决策树可视化 - 图9
5、在C:/Users/H.X.X/anaconda3/Lib/site-packages找到pydot.py这个文件,在spyder里面用Ctrl+F搜索self.prog,把self.prog=‘dot’改成’dot.exe’,保存。一共会搜出六个结果,只需要改这一处就好。
决策树可视化 - 图106、安装graphviz和pydotplus的python模块, 它的安装和安装普通的模块一样, 就是使用pip:
决策树可视化 - 图11
7、在Python终端测试,配置完毕
决策树可视化 - 图12

CART@GraphViz可视化

  1. from sklearn.datasets import load_iris
  2. from sklearn import tree
  3. import pydotplus
  4. import sys
  5. import os
  6. iris = load_iris()
  7. clf = tree.DecisionTreeClassifier()
  8. clf = clf.fit(iris.data, iris.target)
  9. from IPython.display import Image
  10. dot_data = tree.export_graphviz(clf, out_file=None,
  11. feature_names=iris.feature_names,
  12. class_names=iris.target_names,
  13. filled=True, rounded=True,
  14. special_characters=True)
  15. graph = pydotplus.graph_from_dot_data(dot_data)
  16. Image(graph.create_png())

决策树可视化 - 图13
除叶节点(终端节点)之外的所有节点都有 5 部分

  • 基于一个特征的值的有关数据的问题。每个问题的答案要么是 True,要么就是 False。数据点会根据该问题的答案在该决策树中移动。
  • gini:节点的基尼不纯度。当沿着树向下移动时,平均加权的基尼不纯度必须降低。
  • samples:节点中观察的数量。
  • value:每一类别中样本的数量。比如,顶部节点中有 2 个样本属于类别 0,有 4 个样本属于类别 1。
  • class:节点中大多数点的类别(持平时默认为 0)。在叶节点中,这是该节点中所有样本的预测结果。

    GraphViz 搞定后,安装dtreeviz即可

    1. pip install dtreeviz # install dtreeviz for sklearn
    2. pip install dtreeviz[xgboost] # install XGBoost related dependency
    3. pip install dtreeviz[pyspark] # install pyspark related dependency
    4. pip install dtreeviz[lightgbm] # install LightGBM related dependency
    使用也很简单
    决策树可视化 - 图14
    决策树可视化 - 图15