机器学习(十) ——使用决策树进行预测(离散特征值)

机器学习(十)——使用决策树进行预测(离散特征值)

(原创内容,转载请注明来源,谢谢)

一、绘制决策树

决策树的一大优点是直观,但是前提是其以图像形式展示。如果是{'color': {9: 'yes', 2: {'fly': {0: 'no', 1: {'big': {0: 'no', 1:'yes'}}}}, 3: 'no'}}这种类型的决策树,不够直观。

这就是绘制决策树的目的。

绘制决策树,需要用到python的matplotlib类库,其带有丰富的注解、绘图等功能。我希望更加专注于算法本身,而不是类库。因此,这里不贴出绘制的代码。代码本身也不长,80多行,大家可以下载《机器学习实战》的随书代码,如果实在有需要的可以找我,我可以提供我自己写的一个版本。

二、存储与读取决策树

如果每次都需要重新使用样本生成决策树,对于样本数量非常大的情况下,非常耗时且毫无意义。决策树比knn算法的一大优势,就在于其构建完的决策树,后面每个新的样本都可以直接使用来预测,并不需要重新读样本,重新生成。除非样本本身有很大变动,否则保存生成的决策树,更为重要。

1、存储

存储决策树,其过程就是将生成的决策树,序列化后以字符串的形式写入一个文件。具体写入哪里,可以根据项目的实际情况,数据库、redis也都可以用来存储。

python的序列化,引入的pickle类库。同样,不需要太过于专注类库具体内容,只要知道其提供了序列化和反序列化的功能即可。

2、载入

载入的过程,就是从文件(或数据库、redis等)读出存储的决策树的字符串,并且反序列化即可。

三、使用决策树进行分类

这里强调使用,即直接通过输入一个决策树,而不再去生成决策树。使用决策树的过程,就和人眼去比对的过程类似:先比对第一个特征,根据比对结果,走向决策树的不同的子节点;再在子节点处进行比对。直到比对到叶子节点,即得到结果。

用代码和用人眼的区别,就是需要用递归来比对。

四、实战项目

1、需求

运用决策树,预测具有不同特征的人,应该佩戴什么样的隐形眼镜。

这里,把人的特征分为四个:年龄、是否散光、近视程度、泪液程度,需要佩戴的隐形眼镜的分类结果有三种:不能佩戴、佩戴柔软隐形眼镜、佩戴硬的隐形眼镜。

2、实现

1)生成决策树

这里的数据源,已经随书给出如下:

前面四列是人的四个特征值,分布是年龄、近视程度、是否散光、泪液程度,最后一列是分类结果。

生成决策树后,保存在本地,代码如下:

2)绘制决策树

读取生成结果,并且调用绘制的代码进行绘制,代码如下:

3)使用决策树进行预测

读取决策树,并且输入新的一个人的特征值,即可告知该使用何种隐形眼镜。

3)执行代码

绘制决策树

预测结果

五、总结

决策树的难点还是在于生成决策树,使用过程其实很简单。对于绘制决策树部分,我认为是很直观,但是目前学习我暂时不想太深入绘制的过程,因为其涉及很多python的gui操作,目前我想更专注于算法本身,而不是python的语法和类库。

另外,决策树可以进行存储,这一大特性,使得其比knn算法的优势显著,特别是样本数量大的情况。

决策树也存在过拟合的情况,可以通过裁剪决策树来解决问题,对于叶子节点信息量增加不多的就可以进行删除或合并,这个后面会学习到。

同时,ID3算法无法直接处理数值型的特征值,这个后面学习CART算法来构造决策树。可以解决。

——written by linhxx 2018.01.08

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-01-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

PyTorch 模型不适合自己怎么办?预训练教程在这里

前言 最近使用 PyTorch 感觉妙不可言,有种当初使用 Keras 的快感,而且速度还不慢。各种设计直接简洁,方便研究,比 tensorflow 的臃肿...

1.1K4
来自专栏专知

【干货】用PyTorch进行RNN语言建模 - Packed Batching和Tied Weight

【导读】PyTorch是一个日益流行的神经网络框架,自然支持RNN。但是关于RNN,Pytorch的官方教程描述的不怎么详细,这篇文章将介绍使用Pytorch实...

1342
来自专栏帮你学MatLab

《Experiment with MATLAB》读书笔记(八)

读书笔记(八) 这是第八部分指数函数 复制代码即可运行 %% 指数函数与近似导数 a = 2; t = 0:.01:2; h = ...

27210
来自专栏专知

【专知国庆特刊-PyTorch手把手深度学习教程系列01】一文带你入门优雅的PyTorch

【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视...

7037
来自专栏机器之心

资源 | Yoshua Bengio实验室MILA开放面向初学者的PyTorch教程

2776
来自专栏PPV课数据科学社区

【学习】 R语言与机器学习学习笔记(1)K-近邻算法

前言 最近在学习数据挖掘,对数据挖掘中的算法比较感兴趣,打算整理分享一下学习情况,顺便利用R来实现一下数据挖掘算法。 数据挖掘里我打算整理的...

2836
来自专栏大数据挖掘DT机器学习

tensorflow LSTM + CTC实现端到端OCR

本文github源码地址: 在公众号 datadw 里 回复 OCR 即可获取。 最近在做OCR相关的东西,关于OCR真的是有悠久了历史了,最开始用tes...

6713
来自专栏云时之间

深度学习与TensorFlow:VGG论文复现

上一篇文章我们介绍了下VGG这一个经典的深度学习模型,今天便让我们通过使用VGG开源的VGG16模型去复现一下该论文.

5243
来自专栏PPV课数据科学社区

【学习】数据可视化基础学习摘要

数据可视化参考流程 科学可视化的早期可视化流水线,描述了从数据空间到可视空间的映射,包含串行处理数据的各个阶段: 原始数据->数据分析->预处理数据->过滤->...

3346
来自专栏null的专栏

论文阅读——Wide & Deep Learning

这篇文章是阅读《Wide & Deep Learning for Recommender Systems》后的总结,该文章中提出结合Wide模型和Deep模型...

4785

扫码关注云+社区