前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习实战之Python3实现决策树算法

机器学习实战之Python3实现决策树算法

作者头像
IT派
发布2018-03-28 18:55:13
1.6K0
发布2018-03-28 18:55:13
举报
文章被收录于专栏:IT派IT派

导语:今天这篇文章也是我们的志愿编辑写出来的文章哦,稳重介绍了如何在python3中实现自己的决策树算法并画出来!另外,小编Tom邀请你一起搞事情!

预备知识:信息增益,香农熵

编程使用库:numpy,matplotlib

算法应用:挑选隐形眼镜和生物物种的分类

文章概览

  • 决策树原理讲解
  • 提出问题
  • 香农熵算法实现
  • 划分数据集
  • 构造决策树
  • 绘制决策树
  • 实际应用

决策树原理讲解

决策树顾名思义,就是一棵可以用来帮助机器来做决策的树形结构

从这个例子,我们看到分析个人收入风险的决策,可以从房产,结婚,月收入三个特征进行判断
因此通过这个三个特征也就能判断用户是否具备偿还能力

那么依照这个思路我们可以对相关的分类问题进行一样的处理,寻找特征,然后判断条件,最终得到结果。那么决策树实现方面需要面对那些问题呢?

提出问题

  • 特征之间关系如何计算?谁是根谁是结点
  • 树形结构应该如何存储?
  • 如何划分数据集?
  • 如何构造决策树?
  • 应用:如何帮助医生根据用户的眼镜情况挑选眼镜

香农熵算法的实现

构造决策树只需要在特征方面进行分析,而要想分析特征就需要数据的分析从而挑选出哪个特征作为根以及哪个特征作为结点。

因此,数据的分析就需要引入两个概念香农熵和信息增益

香农熵就是信息的期望值

信息的定义公式

熵就是所有类别所有可能值包含的信息期望值

对于上述公式具体的数学意义,读者可以自行查阅相关资料。而我们接下要做的就是实现它的数学公式

划分数据集

之前我们已经实现了香农熵,后面,我们需要使用这个香农熵。那么如何使用呢?

最简单的做法就是在一个列表中计算所有特征的熵。

在计算过程中,我们去除其中一个特征,然后计算剩余的特征的熵。

这一部分可以作为一个函数,就是划分数据集。

代码如下:

划分之后的数据集

构造决策树

目前我们实现了两个函数,也就是两个小工具。两个工具可以只在意输入数据和输出结果。具体实现不必过多理会。

那么接下我们重点关注如何用工具构造我们的决策树

思路:

  1. 决策树用递归形式实现
  2. 决策树在结构上,由字典不断嵌套形成决策树
  3. 在根和左右儿子的选择上,我们可以用到我们的第一个工具,通过熵的计算信息增益。信息增益最大的也就是最分类范围广的特征,作为父结点。所以这里需要定义一个函数 chooseBestFeatureToSplit()
  4. 然后使用第二个工具,划分数据集
  5. 在子节点中,我们选取返回次数最多的分类名称.同样的定义一个函数majorityCnt()

代码如下:

如图:

绘制决策树

绘制决策树可以在构造好的决策树的字典中通过递归实现算法。因为不涉及过多决策树思想。所以读者自行实现或者下载代码参考。

如图:

实际应用

如上图,我们实际上已经实现了对于隐形眼镜的决策分类。后续我们只需要导入数据和相关调用代码即可

这里需要注意的是,决策树一旦构建好之后,我们可以将它存储到文件中,这样下一次测试数据,就无需再一次跑数据生成决策树。

参考代码:

最后提醒

  • 数据集已经上传在我的github,有什么建议和意见请提出来吧
  • 读者可以不必在意图片中的例子结果。只要理解决策树思路即可
  • 如果你觉得这个对你有帮助,就给我个star吧
  • github地址:https://github.com/MagnetoWang/machine-learning-notes/tree/master/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%AE%9E%E6%88%98
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT派 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章概览
  • 决策树原理讲解
  • 提出问题
  • 香农熵算法的实现
  • 划分数据集
  • 构造决策树
  • 绘制决策树
  • 实际应用
  • 最后提醒
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档