《机器学习实战》——决策树之关于熵的理解及python实现

《机器学习实战》第三章决策树提到信息增益和熵的含义,并含python代码实现,本文对代码进行了注释。

一、熵的理解:

信息论创始人克劳德·艾尔伍德·香农,引入了信息熵,表示随机变量不确定度的度量。

公式如下:

H(X)=-\sum\limits_{x\in\mathcal{X}}p(x)\log p(x)

满足如下三条性质:

  • 单调性:发生概率越高的事件,所携带的信息熵越低。例:“太阳每天从东方升起”为确定事件,不携带信息,从信息论角度,没有消除任何不确定性,信息量为0。
  • 非负性:信息熵不能为负。 若为负,则获得某信息后不确定性反而增加,不合逻辑。
  • 累加性:多随机事件同时发生存在的总不确定性的量度==各事件不确定性的量度之和

香农已从数学上证明了满足上述三个条件的随机变量不确定性度量函数具有唯一形式,即上述的 H(X)公式。

即:一个事件的信息量就是这个事件发生的概率的负对数。

       熵就是信息量的期望(平均而言发生一个事件得到的信息量大小)

二、计算给定数据的熵---python实现

from math import log
import operator

def calcShannonEnt(dataSet):
    numEntries = len(dataSet)   #数据集中实例总数(list的总数)
    labelCounts = {}            #创建字典,表示类标签出现次数
    for featVec in dataSet: 
        currentLabel = featVec[-1]    #最后一列,即类标签(yes/no)
        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) #log base 2
    return shannonEnt

三、案例输出

#定义一个案例函数
def createDataSet():
    dataSet = [[1, 1, 'yes'],
               [1, 1, 'yes'],
               [1, 0, 'no'],
               [0, 1, 'no'],
               [0, 1, 'no']]
    #change to discrete values
    return dataSet

#输出结果
>>> dataSet=createDataSet()
>>> dataSet
[[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
>>> calcShannonEnt(dataSet)
0.9709505944546686

增加一个分类后,熵增加:

>>> dataSet[0][-1]='maybe'
>>> dataSet
[[1, 1, 'maybe'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
>>> calcShannonEnt(dataSet)
1.3709505944546687

 

参考文献:

知乎,https://www.zhihu.com/question/22178202

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值