1. 程式人生 > >鳶尾花決策樹/隨機森林例項——sklearn

鳶尾花決策樹/隨機森林例項——sklearn

本次實踐主要通過 DecisionTreeClassifier  熵/gini係數決策樹模型、以及RandomForestClassifier隨機森林模型進行分類;

訓練集:測試集=8:2

結果:返回模型評價結果、匯出DecisionTreeClassifier  熵/gini係數決策樹模型生成的決策樹.dot檔案並,生成png格式決策樹圖片。

注意:   相同的資料集,因演算法訓練過程中有用到隨機演算法,如果random_state引數不設定,那麼每次執行模型將會生成不一樣的結果,如果模型投入生產會產生很不好的影響,過程中任何涉及隨機演算法都需要注意。

#!/usr/bin/evn python
# -*-coding:utf8 -*-
''' 鳶尾花經典資料處理: # 資料獲取: # http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data import requests content = requests.get('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data') file = open('F:\\kettle\\tbsales\\pyhon_seana\\testresult\\liris_data.txt', "ab+") file.write(content.text.encode('utf-8'))
# data_ = pd.read_excel(r'F:\kettle\tbsales\pyhon_seana\chapter5\demo\data\sales_data.xls',index_col=u'序號') ''' iris_data = [] with open('F:\\kettle\\tbsales\\pyhon_seana\\testresult\\liris_data.txt', "r") as filereader: for line in filereader.readlines()[:150]: line = line.replace('\n',''
) iris_data.append(line.split(',')) filereader.close() import pandas as pd data = pd.DataFrame(iris_data) data.columns = ['sepal_length','sepal_width','petal_length','petal_width','iris_type'] data = data.sample(frac=1,random_state=10).reset_index(drop=True) #隨機打亂資料順序提高模型準確性,設定隨機引數,否則每次執行結果將會不同。 test_weight = 0.8 x_train = data.iloc[:int(len(data)*test_weight), 0:4] y_train = data.iloc[:int(len(data)*test_weight), 4] X_test = data.iloc[int(len(data)*test_weight):, 0:4] y_test = data.iloc[int(len(data)*test_weight):, 4] from sklearn.tree import DecisionTreeClassifier as DTC from sklearn.ensemble import RandomForestClassifier as RFC dtc_en = DTC(criterion='entropy',random_state=0)#熵 ,確定隨機引數,否則每次執行模型結果不同 dtc_gn = DTC(criterion='gini',random_state=0)#gini係數 rfc = RFC(n_estimators=1000, random_state=10) dtc_en.fit(x_train, y_train) dtc_gn.fit(x_train, y_train) rfc.fit(x_train, y_train) dtc_en_pred = dtc_en.predict(X_test) dtc_gn_pred = dtc_gn.predict(X_test) rfc_pred = rfc.predict(X_test) from sklearn.metrics import confusion_matrix, classification_report dtc_en_score = classification_report(y_test, y_pred=dtc_en_pred) dtc_gn_score = classification_report(y_test, y_pred=dtc_gn_pred) dtc_rf_score = classification_report(y_test, y_pred=rfc_pred) print('dtc_en_score 模型綜合評估矩陣如下:\n',dtc_en_score) print('dtc_gn_score 模型綜合評估矩陣如下:\n',dtc_gn_score) print('dtc_rf_score 模型綜合評估矩陣如下:\n',dtc_rf_score) from sklearn.tree import export_graphviz import numpy as np data_feature_name = data.columns[:-1]#資料列名 data_target_name = np.unique(data[data.columns[-1]])#分類列資料類別名 #資訊熵/gini係數模型生成dot檔案 with open("F:\\kettle\\tbsales\\pyhon_seana\\testresult\\dtc_en_iristree.dot", 'w') as f: f = export_graphviz(dtc_en, feature_names=data_feature_name,class_names=data_target_name, out_file=f,special_characters=True) with open("F:\\kettle\\tbsales\\pyhon_seana\\testresult\\dtc_gn_iristree.dot", 'w') as f: f = export_graphviz(dtc_gn, feature_names=data_feature_name,class_names=data_target_name, out_file=f,special_characters=True) #生成png圖片--注意中文會顯示框框亂碼,程式碼暫時沒找到解決方法,目前含中文分類都用GVEidt開啟,外加一句程式碼(下文) import pydotplus,os from IPython.display import Image os.environ["PATH"] += os.pathsep + 'D:/Program Files (x86)/Graphviz2.37/bin/' dot_tree_en = export_graphviz(dtc_en,out_file=None,feature_names=data_feature_name,class_names=data_target_name,filled=True, rounded=True,special_characters=True) graph = pydotplus.graph_from_dot_data(dot_tree_en) img = Image(graph.create_png()) graph.write_png("F:\\kettle\\tbsales\\pyhon_seana\\testresult\\dtc_en.png")#圖片中文亂碼未解決

執行結果:

dtc_en_score 模型綜合評估矩陣如下:
                  precision    recall  f1-score   support

    Iris-setosa       1.00      1.00      1.00         9
Iris-versicolor       1.00      1.00      1.00         9
 Iris-virginica       1.00      1.00      1.00        12
    avg / total       1.00      1.00      1.00        30


dtc_gn_score 模型綜合評估矩陣如下:
                  precision    recall  f1-score   support

    Iris-setosa       1.00      1.00      1.00         9
Iris-versicolor       1.00      1.00      1.00         9
 Iris-virginica       1.00      1.00      1.00        12
    avg / total       1.00      1.00      1.00        30


dtc_rf_score 模型綜合評估矩陣如下:
                  precision    recall  f1-score   support

    Iris-setosa       1.00      1.00      1.00         9
Iris-versicolor       1.00      0.89      0.94         9
 Iris-virginica       0.92      1.00      0.96        12
    avg / total       0.97      0.97      0.97        30

決策樹-此處只生成熵生成的圖片,gini係數生成樹狀相同,只是裡面熵值換成了gini值。


dot檔案的處理:

1、安裝Graphviz----地址:https://graphviz.gitlab.io/_pages/Download/Download_windows.html   graphviz-2.38.msi 

    我是Windows版本,zip包直接解壓不需要安裝,但我是沒有找到GVEdit,安裝mis字尾檔案就直接所有程式很快找到。


2、開啟檔案,一般選擇開啟檔案即自動生成決策樹,當代碼修改後點選小人可以生成決策樹。


3、決策樹中文亂碼的情況---目前個人試過pdf或者是png或者dot檔案,含有中文分類標籤的亂碼成框框,可能經驗太少,目前只發現一種解決的辦法,就是GVEdit裡面開啟,加一行程式碼~~

中文亂碼:


新增程式碼:node[fontname = "PMingLiu"];


png以及pdf檔案亂碼尚未解決~要是大神路過求指教~~~