Sklearn----使用决策树预测隐形眼镜类型

 1 import pandas as pd
 2 import pydotplus
 3 from sklearn.externals.six import StringIO  #LabelEncoder:将字符串转换为增量值
 4 #OneHotEncoder:使用One-of-K算法将字符串转换为整数
 5 from sklearn.preprocessing import LabelEncoder, OneHotEncoder
 6 from sklearn import tree
 7 
 8 if __name__ == '__main__':
 9     with open('lenses.txt', 'r') as fr:                                        #加载文件
10         lenses = [inst.strip().split('	') for inst in fr.readlines()]        #处理文件
11     lenses_target = []                                                        #提取每组数据的类别,保存在列表里
12     for each in lenses:
13         lenses_target.append(each[-1])
14     print(lenses_target)
15 
16     lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate']            #特征标签       
17     lenses_list = []                                                        #保存lenses数据的临时列表
18     lenses_dict = {}                                                        #保存lenses数据的字典,用于生成pandas
19     for each_label in lensesLabels:                                            #提取信息,生成字典
20         for each in lenses:
21             lenses_list.append(each[lensesLabels.index(each_label)])
22         lenses_dict[each_label] = lenses_list
23         lenses_list = []
24     # print(lenses_dict)                  #打印字典信息
25     lenses_pd = pd.DataFrame(lenses_dict)  # 生成pandas.DataFrame
26     # print(lenses_pd)  # 打印pandas.DataFrame
27     le = LabelEncoder()  # 创建LabelEncoder()对象,用于序列化
28     for col in lenses_pd.columns:  # 为每一列序列化
29         lenses_pd[col] = le.fit_transform(lenses_pd[col])
30     # print(lenses_pd)  #打印编码信息
31 
32     clf = tree.DecisionTreeClassifier(max_depth=4)  # 创建DecisionTreeClassifier()类
33     clf = clf.fit(lenses_pd.values.tolist(), lenses_target)  # 使用数据,构建决策树
34     dot_data = StringIO()
35     tree.export_graphviz(clf, out_file=dot_data,  # 绘制决策树
36                          feature_names=lenses_pd.keys(),
37                          class_names=clf.classes_,
38                          filled=True, rounded=True,
39                          special_characters=True)
40     graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
41     graph.write_pdf("tree.pdf")  # 保存绘制好的决策树,以PDF的形式存储。

1、数据集(需要数据集的留言)  

  一共有24组数据,数据的Labels依次是ageprescriptastigmatictearRateclass,也就是第一列是年龄,第二列是症状,第三列是是否散光,第四列是眼泪数量,第五列是最终的分类标签。数据如下图所示:

2、使用Graphviz可视化决策树

  Graphviz的是AT&T Labs Research开发的图形绘制工具,他可以很方便的用来绘制结构化的图形网络,支持多种格式输出,生成图片的质量和速度都不错。它的输入是一个用dot语言编写的绘图脚本,通过对输入脚本的解析,分析出其中的点,边以及子图,然后根据属性进行绘制。是使用Sklearn生成的决策树就是dot格式的,因此我们可以直接利用Graphviz将决策树可视化。

  在编写代码之前,需要安装pydotplus和Grphviz

 

 3、安装Graphviz

   Graphviz不能使用pip进行安装,我们需要手动安装,下载地址:http://www.graphviz.org/Home.php

  下载好安装包,进行安装,安装完毕之后,需要设置Graphviz的环境变量,在系统变量的Path变量中,添加Graphviz的环境变量,比如Graphviz安装在了D盘的根目录,则添加:D:Graphvizin;

  运行代码,在该python文件保存的相同目录下,会生成一个名为tree的PDF文件,打开文件,可以看到决策树的可视化效果图。

原文地址:https://www.cnblogs.com/fd-682012/p/11646230.html