博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[机器学习] Python代码来构建一颗决策树(Decision Tree)的案例
阅读量:4041 次
发布时间:2019-05-24

本文共 3039 字,大约阅读时间需要 10 分钟。

Python代码来构建一颗决策树(Decision Tree)的案例

用Python代码来构建一颗决策树(Decision)

工具

  • Python+Jupyter
  • Graphviz 2.38 (Graphviz是一个开源的图形可视化软件)

Graphviz的下载地址:

Graphviz是一个开源的图形可视化软件。图形可视化是将结构信息表示为抽象图形和网络图的一种方法。它在网络、生物信息学、软件工程、数据库和web设计、机器学习以及其他技术领域的可视化界面中有着重要的应用。

Graphviz布局程序使用简单的文本语言对图形进行描述,并以有用的格式制作图表,例如用于网页的图像和SVG;用于包含在其他文档中的PDF或Postscript;或显示在交互式图形浏览器中。Graphviz对于具体的图表有许多有用的特性,例如颜色、字体、表格节点布局、线条样式、超链接和自定义形状的选项。


样例数据来源

在这里可以看到数据集的样子:

这个样例数据共有 215行。


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

Input

import numpy as npimport pandas as pdfrom sklearn.model_selection import train_test_splitfrom 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 pydotplusimport matplotlib.pyplot as pltimport 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)# ROCfpr, tpr, thresholds = roc_curve(y_test, y_score[:, [1]])# AUCauc_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 osos.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 osos.environ["PATH"] += os.pathsep + 'D:\\Program Files (x86)\\Graphviz2.38\\bin'  #注意修改你的路径

Output:

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

 

解读

转载地址:http://npvdi.baihongyu.com/

你可能感兴趣的文章
Android中AsyncTask的简单用法
查看>>
Linux usb 设备驱动 (1)
查看>>
解决跨网场景下,CAS重定向无法登录的问题(无需修改现有代码)
查看>>
java反编译命令
查看>>
activemq依赖包获取
查看>>
概念区别
查看>>
关于静态块、静态属性、构造块、构造方法的执行顺序
查看>>
final 的作用
查看>>
在Idea中使用Eclipse编译器
查看>>
idea讲web项目部署到tomcat,热部署
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
Maven跳过单元测试的两种方式
查看>>