zoukankan      html  css  js  c++  java
  • 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文件,打开文件,可以看到决策树的可视化效果图。

  • 相关阅读:
    phpQuery—基于jQuery的PHP实现
    php 知乎爬虫
    windows下安装php5.5的redis扩展
    Redis 安装
    使用AngularJS创建应用的5个框架
    Redis能干啥?细看11种Web应用场景
    前端开发必须知道的JS之闭包及应用
    javascript深入理解js闭包
    day16<集合框架+>
    day15<集合框架>
  • 原文地址:https://www.cnblogs.com/fd-682012/p/11646230.html
Copyright © 2011-2022 走看看