[机器学习] 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:

 

解读

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