[機器學習] Python代碼來構建一顆決策樹(Decision Tree)的案例

Python代碼來構建一顆決策樹(Decision Tree)的案例

用Python代碼來構建一顆決策樹(Decision)

工具

  • Python+Jupyter
  • Graphviz 2.38 (Graphviz是一個開源的圖形可視化軟件)

Graphviz的下載地址:

http://www.graphviz.org/download/

Graphviz是一個開源的圖形可視化軟件。圖形可視化是將結構信息表示爲抽象圖形和網絡圖的一種方法。它在網絡、生物信息學、軟件工程、數據庫和web設計、機器學習以及其他技術領域的可視化界面中有着重要的應用。

Graphviz佈局程序使用簡單的文本語言對圖形進行描述,並以有用的格式製作圖表,例如用於網頁的圖像和SVG;用於包含在其他文檔中的PDF或Postscript;或顯示在交互式圖形瀏覽器中。Graphviz對於具體的圖表有許多有用的特性,例如顏色、字體、表格節點佈局、線條樣式、超鏈接和自定義形狀的選項。


樣例數據來源

https://raw.githubusercontent.com/ffzs/dataset/master/glass.csv

在這裏可以看到數據集的樣子:https://github.com/ffzs/dataset/blob/master/glass.csv

這個樣例數據共有 215行。


在Jupyter 的交互模式中,源代碼如下

Input

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, export_graphviz
# 導入評估指標模塊
from sklearn.metrics import accuracy_score, auc, confusion_matrix, f1_score, precision_score, recall_score, roc_curve
# 導入表格庫
import prettytable
# 導入dot插件庫
import pydotplus
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

# 數據導入
df = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/glass.csv', usecols=['Na','Ca','Type'])

# 爲了決策樹圖示簡潔我們儘量減少分類,和特徵值
dfs = df[df.Type < 3]

# 獲取特徵值
X = dfs[dfs.columns[:-1]].values
# 獲取標籤值
y = dfs['Type'].values - 1

# 將數據37分爲測試集合訓練集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=2018)
#### 模型訓練 ####
# 決策樹模型
dt_model = DecisionTreeClassifier(random_state=2018)

# 訓練模型
dt_model.fit(X_train, y_train)

# 對測試集做預測
pre_y = dt_model.predict(X_test)

####模型評估####
# 混淆矩陣
confusion_m = confusion_matrix(y_test, pre_y)

df_confusion_m = pd.DataFrame(confusion_m, columns=['0', '1'], index=['0', '1'])

df_confusion_m.index.name = 'Real'
df_confusion_m.columns.name = 'Predict'

df_confusion_m

 Output:

# 獲取決策樹的預測概率
y_score = dt_model.predict_proba(X_test)

# ROC
fpr, tpr, thresholds = roc_curve(y_test, y_score[:, [1]])

# AUC
auc_s = auc(fpr, tpr)

# 準確率
accuracy_s = accuracy_score(y_test, pre_y)

# 精準度
precision_s = precision_score(y_test, pre_y)

# 召回率
recall_s = recall_score(y_test, pre_y)

# F1得分
f1_s = f1_score(y_test, pre_y) 

# 評估數據製表
df_metrics = pd.DataFrame([[auc_s, accuracy_s, precision_s, recall_s, f1_s]], columns=['auc', 'accuracy', 'precision', 'recall', 'f1'], index=['結果'])

df_metrics

 Output:

#### 可視化ROC##### 
plt.figure(figsize=(8, 7))
plt.plot(fpr, tpr, label='ROC')  # 畫出ROC曲線
plt.plot([0, 1], [0, 1], linestyle='--', color='k', label='random chance')  
# 畫出隨機狀態下的準確率線
plt.title('ROC')  # 子網格標題
plt.xlabel('false positive rate')  # X軸標題
plt.ylabel('true positive rate')  # y軸標題
plt.legend(loc=0)
plt.savefig('x.png')

 Output:

 

import os
os.environ["PATH"] += os.pathsep + 'D:\\Program Files (x86)\\Graphviz2.38\\bin'  #注意修改你的路徑
####保存決策樹桂枝圖爲pdf####
# 決策樹規則生成dot對象
dot_data = export_graphviz(dt_model, max_depth=5, feature_names=dfs.columns[:-1], filled=True, rounded=True)

# 通過pydotplus將決策樹規則解析爲圖形
graph = pydotplus.graph_from_dot_data(dot_data)

# 將決策樹規則保存爲PDF文件
graph.write_pdf('G:\\Data Scientist Learning\\tree.pdf')
# 保存爲jpg圖片
graph.write_jpg('G:\Data Scientist Learning\\DecisionTree_sample.jpg')

上面的源代碼中請注意這樣一行代碼:

 

import os
os.environ["PATH"] += os.pathsep + 'D:\\Program Files (x86)\\Graphviz2.38\\bin'  #注意修改你的路徑

Output:

打開生成的PDF文件,或者JPG圖片,可以看下圖的Decision Tree:

 

解讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章