从零开始学人工智能(13)--Python · 决策树(一)· 准则

浏览: 1377

作者:射命丸咲    Python 与 机器学习 爱好者

知乎专栏:https://zhuanlan.zhihu.com/carefree0910-pyml 

个人网站:http://www.carefree0910.com 

往期阅读:

从零开始学人工智能(11)--Python · 神经网络(四*)· 网络

从零开始学人工智能(12)--Python · 决策树(零)· 简介

本章用到的 GitHub 地址:

https://github.com/carefree0910/MachineLearning/blob/master/Zhihu/CvDTree/one/CvDTree.py


本章用到的数学相关知识和Python相关知识地址:

https://zhuanlan.zhihu.com/p/24482628?refer=carefree0910-pymlhttps://zhuanlan.zhihu.com/p/24501172?refer=carefree0910-pyml

这一章主要打算用大白话说一下决策树是什么,然后介绍一个算法中的核心辅助结构——Cluster 的实现(我也不知道中文叫什么我也不知道为什么当初脑子里第一个蹦出来的就是这个名字)(逃)

决策树,顾名思义,就是用来决策的树(废话)。可以这样去想一个决策树的决策过程:

  1. 输入一个数据

  2. 根据数据的某个特征来把数据分成好几份

  3. 如果分完数据后发现

    1. 某堆数据里面某一个类别的数据占相当大多数,就不再分隔这堆数据、直接输出类别

    2. 某堆数据还很“混乱无序”,那么就这堆数据就要继续分下去(转第 2. 步)

大概就这三步。可以发现,大部分时间都是根据某个“准则”来进行操作的,所以怎样选择这个准则就成了至关重要的问题

我们同时还可以发现,这个过程是个递归过程。通俗点来说,就是整个过程都是对同一类物体做的同一系列操作

以上两个发现对应着两个核心。这一章我们就先讲第一个核心——准则

常见的准则有两种,分别是熵和 Gini 系数。它们的定义可以参见这篇文章(地址:https://zhuanlan.zhihu.com/p/24482628?refer=carefree0910-pyml,这里就主讲实现(Again,我会先讲一个相对朴素的实现,而把支持样本权重的版本放在后面):

  1. 预处理数据,准备好接下来可能要用到的变量

    image.png

    其中:

    1. 输入的 data 是 n x d 维的;n 代表有 n 个数据,d 代表有 d 个维度

    2. 输入的 labels 是标签向量

    3. Counter 是内置库的功能,用于数 labels 中各个类别的出现次数

    4. base 是计算熵的时候对数的底,基本可以不管

  2. 熵与条件熵

    1. 利用 labels 和 counters 计算熵

      image.png

      这里支持用户自己输入各类别的出现次数;如果没有输入,就用内置的类别次数代替
      eps 则是为了数值稳定

    2. 利用上述 ent 函数计算相对熵(建议先知道定义是什么再看……)

      image.png

      看上去很复杂,其实就四点:

      1. 获取指定维度数据的所有特征

      2. 根据这些特征将原数据切分成若干份

      3. 将这几份数据分别喂给一个 Cluster 并利用上面第 1. 步定义的 ent 函数算出熵

      4. 把这些熵按定义弄出一个条件熵

  3. Gini 系数,这个实现起来比较方便、因为形式比较简单

    image.png

    同样支持用户自己输入各类别的出现次数

  4. 信息增益。这是决策树生长的重点,但有了上面两个函数之后,根据定义的话、直接条件熵减去熵就行(或者更宽泛地说、是混乱程度减去条件混乱程度),最多再做一些小的改动。相信聪明的观众老爷们可以轻松地完成最朴素的实现,所以在这里我就不细讲怎么定义 info_gain 了,等到讲比较复杂的模型时再补吧~
    顺便也可以当做作业和练习呢~
    其实主要是因为懒呢~(被 pia 飞)
    ========== 更新 ==========
    这里提供一个根据 ID3 算法的信息增益实现,C4.5 和 CART 的话会在后面讲~

    image.png

    相当直观吧 ( σ'ω')σ

那么以上就把准则的实现大概说明了一下,接下来就要处理第二个核心问题——递归生成、裁剪我们的决策树了。


希望观众老爷们能够喜欢~

公众号后台回复关键词学习

回复 人工智能          揭开人工智能的神秘面纱

回复 贝叶斯算法      贝叶斯算法与新闻分类

回复 机器学习          R&Python机器学习

回复 阿里数据          阿里数据系列课程

回复 Python             Python机器学习案例实战

回复 Spark               征服Spark第一季

回复 kaggle             机器学习kaggle案例

回复 大数据             大数据系列视频

回复 数据分析          数据分析人员的转型

回复 数据挖掘          数据挖掘与人工智能

回复 机器学习          R&Python机器学习

回复 阿里数据          阿里数据系列课程

回复 R                      R&Python机器学习入门


推荐 0
本文由 人工智能爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册