实例决策树-并画图呈现树结构

from six import StringIO
from sklearn.feature_extraction import DictVectorizer
from sklearn import tree, preprocessing
import numpy as np
import pydotplus

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

# 特征的预测数值
l1_1 = [
    {"类别": "司机", "学历": "本科", "性别": "女", "颜值": "中"},
]
# 工资结果列表
l2 = [
    30000, 3000, 2500, 10000, 5000, 30000, 5000
     ]

# 特征提取器并转换成预测数组
ve = DictVectorizer()
label = preprocessing.LabelEncoder()
trainx = ve.fit_transform(l1).toarray()
# 打印标签编码
print(trainx)
#va = preprocessing.LabelBinarizer()
trainy = np.array(l2)

# 选择决策树 选择标准类型
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf.fit(trainx, trainy)
t = clf.predict(np.array(ve.transform(l1_1).toarray()))
# 输出所有特征
print(ve.feature_names_)
# 输出预测值
print(t)

# 输出特征值
print(clf.feature_importances_)

"""
可视化
"""
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")

 

 

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

OutputPicture

实例决策树-并画图呈现树结构_第1张图片

你可能感兴趣的:(python)