文章目录

  • 前言
  • 一、环境
  • 二、运用决策树进行分类
    • 1.数据预处理,划分数据集
    • 2.调用决策树分类器进行分类
    • 3.graphviz工具画决策树图像
    • 4.画出分类后样本点的分布图像
    • 5.模型评估
  • 三、决策树进行回归(待更新)

前言

以鸢尾花数据为例,介绍决策树及python实现

一、环境

操作系统: windows 10
IDE: pycharm(python 3.9)
浏览器:Microsoft Edge

二、运用决策树进行分类

1.数据预处理,划分数据集

代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.model_selection import train_test_split
import pydotplus# 花萼长度、花萼宽度,花瓣长度,花瓣宽度
iris_feature_E = 'sepal length', 'sepal width', 'petal length', 'petal width'
iris_feature_E_2 = 'sepal length', 'sepal width'
iris_feature = u'花萼长度', u'花萼宽度', u'花瓣长度', u'花瓣宽度'
iris_class = 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica'
# 数据文件路径
path = 'iris.data'
data = pd.read_csv(path, header=None)
x = data[range(4)]
print(x)
# 非常有用的方法,获取不同元素的个数并标号0-2
y = pd.Categorical(data[4]).codes# 为了可视化,仅使用前两列特征
x = x.iloc[:, :2]# random_state=1表示随机划分
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=1)
print(y_test.shape)

2.调用决策树分类器进行分类

代码如下:

model = DecisionTreeClassifier(criterion='entropy')
model.fit(x_train, y_train)
y_test_hat = model.predict(x_test)  # 测试数据

3.graphviz工具画决策树图像

代码如下:

# 保存
# dot -Tpng my.dot -o my.png
# 1、输出[方法一]
with open('iris.dot', 'w') as f:tree.export_graphviz(model, out_file=f)
# 1、输出[方法二]
# tree.export_graphviz(model, out_file='iris1.dot')
# 2、输出为pdf格式
# graph = pydotplus.graph_from_dot_file('iris.dot')
dot_data = tree.export_graphviz(model, out_file=None, feature_names=iris_feature_E_2, class_names=iris_class,filled=True, rounded=True, special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf('iris.pdf')
# 3、生成图像
f = open('iris.png', 'wb')
f.write(graph.create_png())
f.close()

决策树如下:

4.画出分类后样本点的分布图像

# 画图
N, M = 50, 50  # 横纵各采样多少个值
x1_min, x2_min = x.min()
x1_max, x2_max = x.max()
t1 = np.linspace(x1_min, x1_max, N)
t2 = np.linspace(x2_min, x2_max, M)
x1, x2 = np.meshgrid(t1, t2)  # 生成网格采样点
x_show = np.stack((x1.flat, x2.flat), axis=1)  # 测试点
print (x_show.shape)cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])
y_show_hat = model.predict(x_show)  # 预测值
y_show_hat = y_show_hat.reshape(x1.shape)  # 使之与输入的形状相同
print (y_show_hat)
plt.figure(facecolor='w')
plt.pcolormesh(x1, x2, y_show_hat, cmap=cm_light)  # 预测值的显示
plt.scatter(x_test[0], x_test[1], c=y_test.ravel(), edgecolors='k', s=150, zorder=10, cmap=cm_dark, marker='*')  # 测试数据
plt.scatter(x[0], x[1], c=y.ravel(), edgecolors='k', s=40, cmap=cm_dark)  # 全部数据
plt.xlabel(iris_feature[0], fontsize=15)
plt.ylabel(iris_feature[1], fontsize=15)
plt.xlim(x1_min, x1_max)
plt.ylim(x2_min, x2_max)
plt.grid(True)
plt.title(u'鸢尾花数据的决策树分类', fontsize=17)
plt.show()

样本点的分布:

5.模型评估

y_test = y_test.reshape(-1)
print (y_test_hat)
print (y_test)
result = (y_test_hat == y_test)   # True则预测正确,False则预测错误
acc = np.mean(result)
print ('准确度: %.2f%%' % (100 * acc))# 过拟合:错误率
depth = np.arange(1, 15)
err_list = []
for d in depth:clf = DecisionTreeClassifier(criterion='entropy', max_depth=d)clf.fit(x_train, y_train)y_test_hat = clf.predict(x_test)  # 测试数据result = (y_test_hat == y_test)  # True则预测正确,False则预测错误if d == 1:print (result)err = 1 - np.mean(result)err_list.append(err)# print d, ' 准确度: %.2f%%' % (100 * err)print (d, ' 错误率: %.2f%%' % (100 * err))
plt.figure(facecolor='w')
plt.plot(depth, err_list, 'ro-', lw=2)
plt.xlabel(u'决策树深度', fontsize=15)
plt.ylabel(u'错误率', fontsize=15)
plt.title(u'决策树深度与过拟合', fontsize=17)
plt.grid(True)
plt.show()


可以看到,决策树深度为3时正确率最高
决策树如下:

这个时候的样本点划分情况如下:

三、决策树进行回归(待更新)


部分图片/资料来自网络,仅供个人学习使用

python机器学习之决策树(decision tree)相关推荐

  1. 机器学习(五)决策树(decision tree)

    决策树(decision tree)(一)--构造决策树方法 决策树算法起源于E.B.Hunt等人于1966年发表的论文"experiments in Induction",但真正 ...

  2. 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集

    1.背景 决策书算法是一种逼近离散数值的分类算法,思路比较简单,而且准确率较高.国际权威的学术组织,数据挖掘国际会议ICDM  (the IEEE International Conference o ...

  3. 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现

    1.背景      接着上一节说,没看到请先看一下上一节关于数据集的划分数据集划分.现在我们得到了每个特征值得信息熵增益,我们按照信息熵增益的从大到校的顺序,安排排列为二叉树的节点.数据集和二叉树的图 ...

  4. 机器学习:决策树(Decision Tree)介绍

    简介 决策树是一种常见的机器学习算法,它的实现方式类似于我们平时利用多个不同权重选择做决策的过程.以下介绍一个现实生活中的例子. 当父母给自己的女儿介绍对象时,女儿往往会根据对方的年龄.富贵.高矮.美 ...

  5. 机器学习笔记——决策树(Decision Tree)(1)

    决策树 1.引入   1.1定义 决策树,顾名思义,就是帮我们做出决策的树.现实生活中我们往往会遇到各种各样的抉择,把我们的决策过程整理一下,就可以发现,该过程实际上就是一个树的模型.比如相亲的时候: ...

  6. 机器学习:决策树(Decision Tree)--ID3算法

    决策树的主要算法 构建决策树的关键:按照什么样的次序来选择变量(属性/特征)作为分类依据. 根据不同的目标函数,建立决策树主要有以下三种算法 ID3(J.Ross Quinlan-1975) 核心:信 ...

  7. 机器学习算法实践:决策树 (Decision Tree)(转载)

    前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...

  8. 决策树分类python代码_分类算法-决策树 Decision Tree

    决策树(Decision Tree)是一个非参数的监督式学习方法,决策树又称为判定树,是运用于分类的一种树结构,其中的每个内部节点代表对某一属性的一次测试,每条边代表一个测试结果,叶节点代表某个类或类 ...

  9. Python数据挖掘入门与实践 第三章 用决策树预测获胜球队(一)pandas的数据预处理与决策树(Decision tree)

    作为一个NBA球迷,看到这一章还是挺激动的. 不过内容有点难,研究了半天... 要是赌球的,用这章的预测+凯利公式,是不是就能提升赢钱概率了? 数据预处理 回归书本内容,既然要分析,首先需要有数据: ...

  10. [机器学习笔记] (四)决策树 Decision Tree

    (四)决策树 Decision Tree 基本概念 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性 ...

最新文章

  1. 高通要大干无人机芯片 耗时一年获总部飞行许可
  2. Collection集合概述
  3. 名校博士被撤销学位,只因7行文字抄袭及1张互联网图片​……
  4. java字符串拼接_Java 8中字符串拼接新姿势:StringJoiner
  5. 回型数组 C语言上机题,2014年全国计算机等级二级C语言上机考前预测(含答案)6...
  6. win7一直卡在首次使用计算机,重装win7一直停留在正在启动windows解决方法(完美解决)...
  7. linux按数量复制文件,linux下dd命令使用详解---用指定大小的块拷贝一个文件
  8. xxl-job 原理:
  9. mac快速切换大小写_快速模式匹配–如果是大小写,请切换为大小写
  10. 《互联网周刊》:移动学习在路上
  11. android拼音转汉字,安卓汉字转拼音库 – TinyPinyin
  12. c语言程序转python_c语言转python
  13. PHP 5.6 结束安全支持;万豪称 500 余万护照数据被窃
  14. 大象转身 | 沃尔玛搅局社区团购
  15. 23种设计模式之代理模式
  16. 帕金森疾病的事件相关电位与认知
  17. GBase 8s HAC集群简介
  18. 三种循环的流程图画法总结 [转]
  19. 一部没看过的电影,如何确定是爱情片还是动作片?
  20. 一个移植十分方便的malloc函数族的实现

热门文章

  1. 爬取中国票房网的年度票房的电影票房数据
  2. l1300打印机纸进不去_爱普生打印机不进纸该怎么解决?
  3. 光和储能结合模型(Matlab代码实现)
  4. UVa-10474-大理石在哪
  5. centos7针对xfs文件系统缩小home目录并动态扩容根目录
  6. 二手车零售DTC黑马Carvana的全渠道策略
  7. 论文研读-机器学习可视化-神经网络损失函数吸引域可视化
  8. 【Java】函数式接口
  9. 瑞萨单片USB设备使用
  10. 【跨年】《2020年跨年演讲合集-吴晓波、罗振宇、丁祖昱等》(附下载链接)...