决策树模型是一种很简单但是却很经典的机器学习模型,经历多次的改进和发展,现在已经有很多成熟的树模型,比如早期的ID3算法、现在的C45模型、CART树模型等等,决策树一个很大的优点就是可解释性比较强,当然这也是相对于其他模型来说的,决策树模型在训练完成后还可以通过绘制模型图片,详细了解在树中每一个分裂节点的位置是使用什么属性进行的,本文是硕士论文撰写期间一个简单的小实验,这里整理出来,留作学习记录,下面是具体的实现:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division'''
__Author__:沂水寒城
功能:使用决策树模型来对鸢尾花数据进行分析预测绘制DT模型
'''import os
import csv
import csv
from sklearn.tree import *
from sklearn.model_selection import train_test_split
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
import pydotplus
from sklearn.externals.six import StringIO #生成StringIO对象
import graphviz
os.environ["PATH"]+=os.pathsep + 'D:/Program Files (x86)/Graphviz2.38/bin/'
from sklearn.datasets import load_iris
from sklearn import tree
iris = load_iris()def read_data(test_data='fake_result/features_cal.csv',n=1,label=1):'''加载数据的功能n:特征数据起始位label:是否是监督样本数据'''csv_reader=csv.reader(open(test_data))data_list=[]for one_line in csv_reader:data_list.append(one_line)x_list=[]y_list=[]label_dict={'setosa':0,'versicolor':1,'virginica':2}for one_line in data_list[1:]:if label==1:biaoqian=label_dict[one_line[-1]]#biaoqian=int(one_line[-1])y_list.append(int(biaoqian))   #标志位one_list=[float(o) for o in one_line[n:-1]]x_list.append(one_list)else:one_list=[float(o) for o in one_line[n:]]x_list.append(one_list)return x_list, y_listdef split_data(data_list, y_list, ratio=0.30):'''按照指定的比例,划分样本数据集ratio: 测试数据的比率'''X_train, X_test, y_train, y_test = train_test_split(data_list, y_list, test_size=ratio, random_state=50)print '--------------------------------split_data shape-----------------------------------'print len(X_train), len(y_train)print len(X_test), len(y_test)return X_train, X_test, y_train, y_testdef DT_model(data='XD_new_encoding.csv',rationum=0.20):'''使用决策树模型'''x_list,y_list=read_data(test_data=data,n=1,label=1)X_train,X_test,y_train,y_test=split_data(x_list, y_list, ratio=rationum)DT=DecisionTreeClassifier()DT.fit(X_train,y_train)y_predict=DT.predict(X_test)print 'DT model accuracy: ', DT.score(X_test,y_test)dot_data=StringIO() export_graphviz(DT,out_file=dot_data,class_names=iris.target_names,feature_names=iris.feature_names,filled=True,rounded=True,special_characters=True) graph=pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_png('iris_result.png')if __name__ == '__main__':DT_model(data='iris.csv',rationum=0.30)

输出结果为:

--------------------------------split_data shape-----------------------------------
105 105
45 45
DT model accuracy:  0.9555555555555556
[Finished in 1.6s]

其中,iris.csv是sklearn中的鸢尾花数据,具体的保存方法在我之前的博客中已经有了,感兴趣的话可以看一下

DT模型如下:

直观看起来还是挺漂亮的,仔细看的话足够清晰了,对于详细分析数据而言是很有帮助的。

下面是决策树模型图构建过程中的原始数据

digraph Tree {
node [shape=box] ;
0 [label="X[3] <= 0.8\ngini = 0.666\nsamples = 105\nvalue = [36, 33, 36]"] ;
1 [label="gini = 0.0\nsamples = 36\nvalue = [36, 0, 0]"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="X[3] <= 1.65\ngini = 0.499\nsamples = 69\nvalue = [0, 33, 36]"] ;
0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
3 [label="X[2] <= 5.0\ngini = 0.157\nsamples = 35\nvalue = [0, 32, 3]"] ;
2 -> 3 ;
4 [label="gini = 0.0\nsamples = 31\nvalue = [0, 31, 0]"] ;
3 -> 4 ;
5 [label="X[0] <= 6.05\ngini = 0.375\nsamples = 4\nvalue = [0, 1, 3]"] ;
3 -> 5 ;
6 [label="gini = 0.0\nsamples = 1\nvalue = [0, 1, 0]"] ;
5 -> 6 ;
7 [label="gini = 0.0\nsamples = 3\nvalue = [0, 0, 3]"] ;
5 -> 7 ;
8 [label="X[2] <= 4.85\ngini = 0.057\nsamples = 34\nvalue = [0, 1, 33]"] ;
2 -> 8 ;
9 [label="X[1] <= 3.1\ngini = 0.375\nsamples = 4\nvalue = [0, 1, 3]"] ;
8 -> 9 ;
10 [label="gini = 0.0\nsamples = 3\nvalue = [0, 0, 3]"] ;
9 -> 10 ;
11 [label="gini = 0.0\nsamples = 1\nvalue = [0, 1, 0]"] ;
9 -> 11 ;
12 [label="gini = 0.0\nsamples = 30\nvalue = [0, 0, 30]"] ;
8 -> 12 ;
}

如果需要pdf版本的模型图也可以,下面是生成的PDF数据(因无法上传文件,这里添加的图片的后缀名,使用时直接删除图片后缀即可)

基于决策树构建鸢尾花数据的分类模型并绘制决策树模型相关推荐

  1. R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型、并评估模型在测试集和训练集上的分类效果(accuray、F1、偏差Deviance):Bagging算法与随机森林对比

    R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型.并评估模型在测试集和训练集上的分类效果(accuray.F1.偏差Deviance):Bagging算法与随机森林对比 ...

  2. 感知器算法实现鸢尾花数据的分类

    1.代码 1.算法描述   本博客使用感知器算法来实现鸢尾花数据的分类.因为感知器映射结果为1和-1,为了让感知器能够正常运行,我们舍去了映射类型为0的鸢尾花数据,保留了映射类型为1和-1的鸢尾花数据 ...

  3. 利用python决策树分析iris数据及树状图绘制

    利用python决策树分析iris数据及树状图绘制 数据说明 数据划分 模型训练及评估 模型训练代码 模型大致评估 树状图绘制 Graphviz安装配置及入门 代码汇总 基地部门公众号 数据说明 数据 ...

  4. 决策树对鸢尾花数据两特征组合分类python代码的结果_机器学习笔记-决策树

    在看决策树之前,先看下之前说过的逻辑回归 上图为判断是否要交往的逻辑回归算法图 把身高,财富,颜值分别与w1,w2,w3相乘求和得到一个结果. (其中w1为高的权重,如果比较在意身高,那么w1就会偏大 ...

  5. 基于鸢尾花数据和手写数字,决策树,随机森林,voting,bagging法的比较

    四种方法的具体的原理可以见博文 和西瓜书 先上代码根据结果分析 鸢尾花数据 # evaluate bagging algorithm for classification from numpy imp ...

  6. 美团餐饮SaaS基于StarRocks构建商家数据中台的探索

    作者:何启航,美团餐饮SaaS数据专家(文章整理自作者在 StarRocks Summit Asia 2022 的分享) 随着社会经济的发展,餐饮连锁商家越来越大,"万店时代"来临 ...

  7. 华为云-基于Ambari构建大数据平台

    1第 1 章 搭建学习环境 1.1 工具软件连接 1.1.1xshell 连接工具 打开 xshell 工具,点击连接配置对话框,填写主机名和公网 IP. 在用户认证选项卡中,填写登录用户名和密码. ...

  8. 基于Echarts构建大数据招聘岗位数据可视化大屏

  9. 用java实现基于感知器的数据线性分类

    感知器(perceptron) 是比较简单的二分类器,通过对训练样本集的学习,从而得到判别函数权值的解,产生线性可分的样本判别函数.该算法属于非参数算法,优点是不需要对各类样本的统计性质作任何假设,属 ...

  10. python决策树多分类代码_绘制决策树分类的多类ROC曲线

    我试着用除SVC支持向量机在文档中提供了.我的代码对SVC支持向量机:但是,在我切换到KNeighborsClassifier.多项式nb和DecisionTreeClassifier之后,系统一直告 ...

最新文章

  1. [转] 一个OpenSource的评价图
  2. Eclipse运行jsp动态网页时,提示服务端口在使用中
  3. 配置oracle驱动_Myeclipse中添加Oracle
  4. Project Reactor展开方法
  5. php 获取文件给用户下载,php 下载文件/直接下载数据内容
  6. 把百度网站设为首页_网站百度推广效果好不好?怎样才能把网站推广到百度首页?...
  7. 哪些技能面试经常被问,但实际开发很少用上?
  8. SpringSecurity Form Login
  9. mysql数据的表分区二
  10. PPPOE宽带接入技术及常见故障分析
  11. 小米路由器3无线网连接到服务器,小米路由器3设置完成后,手机能用,电脑没法上网...
  12. 二阶系统的时间响应及动态性能(时域分析)
  13. android expandablelistview横向,Android 的ExpandableListView使用总结--二级展开树结构
  14. 那些“死掉”的超链接,是如何被灰产占用的
  15. 验房师丨验房项目以及验房整改建议
  16. gui开头的歌词_以“去”开头的一句歌词
  17. NFT艺术品交易平台
  18. 一键彻底关闭Win10自带Windows Defender杀毒软件
  19. 文件路径问题解决方案
  20. 西电计算机通信原理,西电通信原理大作业

热门文章

  1. 手动搭建最基础的 Retrofit + OkHttp + RxJava
  2. php foreach 传值还是传引用
  3. 第四届中国云计算大会——123
  4. DEDE织梦标签名称:{/dede:arclist} 详解
  5. 一个很可爱的二次元风格的个人技术博客
  6. build.gradle文件介绍
  7. PS小技巧 | 不需要抠图的黑白配
  8. [POJ3020]Antenna Placement(二分图最大匹配,最小边覆盖)
  9. 《健康流言终结者》一句话总结
  10. 数据库锁表的分析与解决