Machine learning in Action之ID3决策树

Machine learning in Action之ID3决策树

决策树的原理

引出

书中从如何从邮箱中分类垃圾邮件开始入手,设置了三个问题,第一个问题是检查域名是否是’myEmployer.com’,如果是的,则判定为’Email to read when bored’,如果不是则继续判断邮件中是否含有‘曲棍球’这个单词,如果有则表明是朋友发来的,则判定为’Email from friends; read immediately’, 如果不是则判定邮件为垃圾邮件,即’Spam, don’t read.’,这就可以构成一颗简易的决策树,具体的分支如下图所示:
在这里插入图片描述
这就是最简单的决策树的例子,决策树可以帮助我们很好地理解数据,而且决策树可以很好地将数据提炼为知识

优缺点

优点:计算代价小,学习得出的结果很好理解,允许缺失值,可以处理一些不相关的特征
缺点:容易过拟合
常用于:Numeric values, nominal values

分支原理

用于分支的方法有很多种,不同的方法就成为了不同种类的决策树,当然我们也可以根据实际情况,有依据地自行指定分支方法,这样会更适用于实际问题。
分支的整体过程是,从根节点开始,我们需要找到能够得到最好结果的一个分类特征,根据这个特征取值,可以将数据集分为多个不同的子数据集(subsets),这样我们就实现了从根节点的第一次分支,然后我们判断各个子数据集中的数据是否是一个类别的,如果是,则该子数据集不用再继续分解,而该子集的类别就是当前数据的类别;如果子数据集中不止一个类别,则继续执行第一步,直至将所有的数据分类完毕。下面是算法:
在这里插入图片描述
在了解了整体的分解机制之后,我们现在来讨论从根节点向子节点分支的判定依据,也就是我们的分支条件,注意,在这里我们讨论的不仅仅是二分类问题,而是普遍的多分类问题。

ID3算法

ID3算法是决策树分类算法最经典的一种,这是依靠一组数据的信息增益大小来进行决策,信息增益更大的特征将会获得优先分支的权利,即某一个特征(维度)上的信息增益更大,则就会优先以该特征作为节点的分支标准进行分支。
那么怎样来计算信息增益,我们使用的是香浓提出来的香农熵,通过以某一特征分支前和分支后的香农熵之差来作为以该特征进行分类的信息增益。
香农熵的公式为:
l ( x i ) = log ⁡ 2 p ( x i ) . l(x_i) = \log_2p(x_i). l(xi)=log2p(xi).
我们需要将该特征每一种分类的香农熵进行加和,才能得到最后的信息熵,求和的公式为:
H = − ∑ i = 1 n p ( x i ) log ⁡ 2 p ( x i ) H = -\sum_{i=1}^n p(x_i)\log_2 p(x_i) H=i=1np(xi)log2p(xi)
其中n表示所分支出来的分支的数量
这些用python代码实现是这样的:

from math import log
def calcShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {}
    for featVec in dataSet:
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys():      # 没有当前类别则生成当前类别
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1  # 对各个类别的频数生成字典
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key]) / numEntries     # 计算每个类在数据集中所占的比例
        shannonEnt -= prob * log(prob, 2)
    return shannonEnt

这个也是ID3算法的核心代码,原理十分简单。
而决策树除了ID3算法之外还有CartC4.5算法,在这里先不做描述,在后面回归算法用的时候会进一步探讨。

总结

决策树除了单独作为一种算法独立存在之外,他还可以通过随机森林等集成算法进行分类。

参考资料:
《Machine Learning in Action》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值