实例决策树-并画图呈现树结构 + 决策树打印输出最大影响特征

from sklearn.feature_extraction import DictVectorizer
from sklearn import tree, preprocessing
import numpy as np
from six import StringIO
import pydotplus
# 特征必须是字典形式 由于indictor 的标识是y n所以在决策树决策时候,必须把两个状态都输入进,所以在33行预测时候,预测的
# 数组也必须含有indictor = y ,indictor =n 并标识预测的数的状态是什么才能准确预测不然会报输入的特征数小于原特征数的错误
l1 = [
    {"类别": "公务员", "学历": "本科", "性别": "女", "颜值": "高"},
    {"类别": "公司", "学历": "专科", "性别": "男", "颜值": "中"},
    {"类别": "事业编", "学历": "本科", "性别": "女", "颜值": "低"},
    {"类别": "公司", "学历": "专科", "性别": "男", "颜值": "高"},
    {"类别": "事业编", "学历": "专科", "性别": "女", "颜值": "中"},
    {"类别": "公司", "学历": "本科", "性别": "女", "颜值": "高"},
]

# 特征的预测数值
l1_1 = [
    {"类别": "事业编", "学历": "本科", "性别": "女", "颜值": "低"},
]
# 结果列表
l2 = [
    20000, 3000, 2500, 10000, 5000, 30000
     ]

# 特征提取器并转换成预测数组
ve = DictVectorizer()
label = preprocessing.LabelEncoder()
trainx = ve.fit_transform(l1).toarray()
print('输出数字维度特征的含义', ve.get_feature_names())
# 打印标签编码
print('输出各独热编码后的维度数字', trainx)
#va = preprocessing.LabelBinarizer()
trainy = np.array(l2)

# 选择决策树 选择标准类型
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf.fit(trainx, trainy)
# 得到特征重要性的列表,并找到最大值,最后找出该值所在的位置,同时对应全部特征的中文含义
number = list(clf.feature_importances_).index(max(clf.feature_importances_))
print('特征重要性值', ve.get_feature_names()[number])
print('特征重要性值的列表', clf.feature_importances_)

t = clf.predict(ve.transform(l1_1))
"""
可视化
"""
dot_data = StringIO()
tree.export_graphviz(
    clf,
    feature_names=ve.get_feature_names(),
    filled=True,
    rounded=True,
    special_characters=True,
    out_file=dot_data
)
# 设置显示中文
graph = pydotplus.graph_from_dot_data(dot_data.getvalue().replace('helvetica', '"Microsoft YaHei"'))
graph.write_pdf("demo.pdf")

 

***************************************************************************************************************

输出数字维度特征的含义 ['学历=专科', '学历=本科', '性别=女', '性别=男', '类别=事业编', '类别=公务员', '类别=公司', '颜值=中', '颜值=低', '颜值=高']
输出各独热编码后的维度数字 [[0. 1. 1. 0. 0. 1. 0. 0. 0. 1.]
 [1. 0. 0. 1. 0. 0. 1. 1. 0. 0.]
 [0. 1. 1. 0. 1. 0. 0. 0. 1. 0.]
 [1. 0. 0. 1. 0. 0. 1. 0. 0. 1.]
 [1. 0. 1. 0. 1. 0. 0. 1. 0. 0.]
 [0. 1. 1. 0. 0. 0. 1. 0. 0. 1.]]
[0.12895094 0.12895094 0.         0.         0.         0.
 0.38685281 0.         0.         0.35524532]
特征重要性值 类别=公司

 

 

 

************************************************************************************************************

OutputPicture

 

 

注意:需要提前在windows上下载好GraphViz’s executables  

http://www.graphviz.org/

然后配置环境变量

如:E:\GraphViz

验证是否安装成功,进入windows命令行界面,输入dot -version,然后按回车,如果显示graphviz的相关版本信息,则安装配置成功。

 

查看详细:https://blog.csdn.net/sunmingyang1987/article/details/103085688

 

第一步:首先安装pydotplus库
第二部:安装GraphViz
到官网下载:http://www.graphviz.org/Download_windows.php
安装过程一路next即可。

第三步:设置环境变量
 

添加系统变量:

 

在命令窗口输入:dot -version,出现下图所示表示设置成功:

假如以上方法不行,不要以为我骗了你,我两个电脑,第一个电脑可以,第二个电脑环境设置乱了,就不行,那就用以下代码手动加入路径:

import os
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值