随机森林可视化

环境:Windows 10,Python 3.7

首先需要安装Graphviz,这里我们使用的是graphviz-2.38.msi,安装在D:\Program Files (x86)\Graphviz2.38。

代码:

import os
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import export_graphviz

# 系统环境变量添加Graphviz安装路径,以便下面代码可以用dot命令
os.environ[“PATH”] += os.pathsep + ‘D:/Program Files (x86)/Graphviz2.38/bin’

iris = load_iris()
X, y = iris.data, iris.target
model = RandomForestClassifier(n_estimators=3, max_features=1)
model.fit(X, y)

# 循环打印每棵树
for idx, estimator in enumerate(model.estimators_):
# 导出dot文件
export_graphviz(estimator,
out_file=‘tree{}.dot’.format(idx),
feature_names=iris.feature_names,
class_names=iris.target_names,
rounded=True,
proportion=False,
precision=2,
filled=True)
# 转换为png文件
os.system(‘dot -Tpng tree{}.dot -o tree{}.png’.format(idx, idx))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

第一棵树:
在这里插入图片描述
第二棵树:
在这里插入图片描述

第三棵树:
在这里插入图片描述

树结果解释:
1、有多少种类别,整棵树就有多少种颜色,比如我们这里有setosa、versicolor、virginica三个类别,颜色对应是黄、绿、紫,Gini指数越小,该节点颜色越深。
2、value表示当前节点三种类别的样本有多少,比如下面第一棵树的根节点,value = [59,45,48],表示setosa有59个样本,versicolor有45个样本,virginica有48个样本。
3、class表示当前那个类别的样本最多,比如下面第一棵树的根节点,class = setosa,可以看到当前节点它的样本数是最多的。
4、为什么三棵树根节点每个类别的样本数不一样的?Iris数据集不是每个类别都是50个样本吗?-> 务必记得随机森林每棵树所用的数据集都是有放回抽样得到的!