当前位置:   article > 正文

决策树、随机森林结果可视化_随机森林可视化结果解读

随机森林可视化结果解读

https://blog.csdn.net/ydyang1126/article/details/78842952

决策树、随机森林结果可视化

决策树、随机森林结果可视化

一、 决策树可视化环境搭建

二、 决策树可视化的三种方法

第一种

第二种

第三种

三、 决策树可视化实例

四、 随机森林可视化实例

五、 决策树各特征权重可视化


【 本文测试环境为 python3 】

一、 决策树可视化环境搭建

scikit-learn中决策树的可视化一般需要安装graphviz。主要包括graphviz的安装和python的graphviz插件的安装。

  • 第一步是安装graphviz。 
    下载地址在:http://www.graphviz.org/。如果你是linux,可以用apt-get或者yum的方法安装。如果是windows,就在官网下载msi文件安装。无论是linux还是windows,装完后都要设置环境变量,将graphviz的bin目录加到PATH,比如我是windows,将 G:/program_files/graphviz/bin/ 加入了PATH
  • 第二步是安装python插件graphviz:
    pip install graphviz
  • 第三步是安装python插件pydotplus。这个没有什么好说的:
    pip install pydotplus

这样环境就搭好了,有时候python会很笨,仍然找不到graphviz,这时,可以在代码里面加入这一行:

  1. import os
  2. os.environ["PATH"] += os.pathsep + 'G:/program_files/graphviz/bin'

注意后面的路径是你自己的graphviz的bin目录。

二、 决策树可视化的三种方法

可视化需要在模型训练好后,即执行clf.fit(x, y)函数之后:

第一种

  1. with open("iris.dot", 'w') as f:
  2. f = tree.export_graphviz(clf, out_file=f)

然后打开命令行,执行:

  1. #注意,这个命令在命令行执行
  2. dot -Tpdf iris.dot -o iris.pdf

第二种

使用pydotplus库:

  1. import pydotplus
  2. dot_data = tree.export_graphviz(clf, out_file=None)
  3. graph = pydotplus.graph_from_dot_data(dot_data)
  4. graph.write_pdf("iris.pdf")

第三种

使用IPython的display。需要安装jupyter notebook。

  1. from IPython.display import Image
  2. ## 添加graphviz的环境变量
  3. import os
  4. os.environ["PATH"] += os.pathsep + 'G:/program_files/graphviz/bin'
  5. dot_data = tree.export_graphviz(clf, out_file=None,
  6. feature_names=iris.feature_names,
  7. class_names=iris.target_names,
  8. filled=True, rounded=True,
  9. special_characters=True)
  10. graph = pydotplus.graph_from_dot_data(dot_data)
  11. Image(graph.create_png())

三、 决策树可视化实例

  1. #-*- coding: utf-8 -*-
  2. from itertools import product
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from sklearn import datasets
  6. from sklearn.tree import DecisionTreeClassifier
  7. # 仍然使用自带的iris数据
  8. iris = datasets.load_iris()
  9. X = iris.data[:, [0, 2]]
  10. y = iris.target
  11. # 训练模型,限制树的最大深度4
  12. clf = DecisionTreeClassifier(max_depth=4)
  13. #拟合模型
  14. clf.fit(X, y)
  15. # 画图
  16. x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
  17. y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
  18. xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),
  19. np.arange(y_min, y_max, 0.1))
  20. Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
  21. Z = Z.reshape(xx.shape)
  22. plt.contourf(xx, yy, Z, alpha=0.4)
  23. plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
  24. plt.show()

这里写图片描述

  1. #-*- coding: utf-8 -*-
  2. from itertools import product
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from sklearn import datasets
  6. from sklearn.tree import DecisionTreeClassifier
  7. from IPython.display import Image
  8. from sklearn import tree
  9. import pydotplus
  10. import os
  11. os.environ["PATH"] += os.pathsep + 'G:/program_files/graphviz/bin'
  12. # 仍然使用自带的iris数据
  13. iris = datasets.load_iris()
  14. X = iris.data #n行4列,共4维特征
  15. y = iris.target #长度为n的list
  16. # 训练模型,限制树的最大深度4
  17. clf = DecisionTreeClassifier(max_depth=4)
  18. #拟合模型
  19. clf.fit(X, y)
  20. dot_data = tree.export_graphviz(clf, out_file=None,
  21. feature_names=iris.feature_names, #长度为n的list,存储特征名称
  22. class_names=iris.target_names, #长度随意的list,就单纯具体类别名称
  23. filled=True, rounded=True,
  24. special_characters=True)
  25. graph = pydotplus.graph_from_dot_data(dot_data)
  26. # 使用ipython的终端jupyter notebook显示。
  27. Image(graph.create_png())
  28. # 如果没有ipython的jupyter notebook,可以把此图写到pdf文件里,在pdf文件里查看。
  29. graph.write_pdf("iris.pdf")

这里写图片描述

四、 随机森林可视化实例

随机森林是多棵决策树的组合,使用scikit-learn时没有直接的方法显示随机森林,只能拆解成单棵树来显示。 
使用随机森林的属性clf.estimators_获取随机森林的决策树列表( 注意,estimators后边有一个下划线 ’ _’ )

  1. #-*- coding: utf-8 -*-
  2. from sklearn import datasets
  3. from sklearn.ensemble import RandomForestClassifier
  4. from IPython.display import Image
  5. from sklearn import tree
  6. import pydotplus
  7. import os
  8. os.environ["PATH"] += os.pathsep + 'G:/program_files/graphviz/bin'
  9. # 仍然使用自带的iris数据
  10. iris = datasets.load_iris()
  11. X = iris.data
  12. y = iris.target
  13. # 训练模型,限制树的最大深度4
  14. clf = RandomForestClassifier(max_depth=4)
  15. #拟合模型
  16. clf.fit(X, y)
  17. Estimators = clf.estimators_
  18. for index, model in enumerate(Estimators):
  19. filename = 'iris_' + str(index) + '.pdf'
  20. dot_data = tree.export_graphviz(model , out_file=None,
  21. feature_names=iris.feature_names,
  22. class_names=iris.target_names,
  23. filled=True, rounded=True,
  24. special_characters=True)
  25. graph = pydotplus.graph_from_dot_data(dot_data)
  26. # 使用ipython的终端jupyter notebook显示。
  27. Image(graph.create_png())
  28. graph.write_pdf(filename)

五、 决策树各特征权重可视化

决策树特征权重:即决策树中每个特征单独的分类能力。

  1. #-*- coding: utf-8 -*-
  2. from itertools import product
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from sklearn import datasets
  6. from sklearn.tree import DecisionTreeClassifier
  7. from IPython.display import Image
  8. from sklearn import tree
  9. import pydotplus
  10. import os
  11. os.environ["PATH"] += os.pathsep + 'G:/program_files/graphviz/bin'
  12. # 仍然使用自带的iris数据
  13. iris = datasets.load_iris()
  14. X = iris.data
  15. y = iris.target
  16. # 训练模型,限制树的最大深度4
  17. clf = DecisionTreeClassifier(max_depth=4)
  18. #拟合模型
  19. clf.fit(X, y)
  20. y_importances = clf.feature_importances_
  21. x_importances = iris.feature_names
  22. y_pos = np.arange(len(x_importances))
  23. # 横向柱状图
  24. plt.barh(y_pos, y_importances, align='center')
  25. plt.yticks(y_pos, x_importances)
  26. plt.xlabel('Importances')
  27. plt.xlim(0,1)
  28. plt.title('Features Importances')
  29. plt.show()
  30. # 竖向柱状图
  31. plt.bar(y_pos, y_importances, width=0.4, align='center', alpha=0.4)
  32. plt.xticks(y_pos, x_importances)
  33. plt.ylabel('Importances')
  34. plt.ylim(0,1)
  35. plt.title('Features Importances')
  36. plt.show()

 

这里写图片描述 
这里写图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/285527
推荐阅读
相关标签
  

闽ICP备14008679号