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('\t') 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:\Graphviz\bin;

  運行代碼,在該python文件保存的相同目錄下,會生成一個名為tree的PDF文件,打開文件,可以看到決策樹的可視化效果圖。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM