台大李宏毅机器学习—学习笔记07

本文深入探讨了熵的概念,包括信息熵、条件熵、联合熵和相对熵等,解析了这些概念在信息论中的核心作用,并提供了计算香农熵的具体方法。

: 熵(entropy)指的是体系的混乱的程度,在不同的学科中也有引申出的更为具体的定义,是各领域十分重要的参量。
信息熵(香农熵): 是一种信息的度量方式,表示信息的混乱程度,也就是说:信息越有序,信息熵越低。
信息增益: 在划分数据集前后信息发生的变化称为信息增益。

为了计算熵,我们需要求关于H(X)在以p(x)分布下的信息量的数学期望:

条件熵:条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵(conditional entropy)H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望:

联合熵:对服从联合分布为P(x,y)的一对离散随机变量(X,Y),其联合熵H(X,Y)可表示为:

相对熵:又称交叉熵,KL散度等

        如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。P(X),Q(X)的比值取对数之后,在P(X)的概率分布上求期望:

 交叉熵:

计算给定数据集的香农熵的函数:

def calcShannonEnt(dataSet): 
     # 求list的长度,表示计算参与训练的数据量
     numEntries = len(dataSet) 
     # 计算分类标签label出现的次数
     labelCounts = {} 
     # the the number of unique elements and their occurance 
     for featVec in dataSet: 
     # 将当前实例的标签存储,即每一行数据的最后一个数据代表的是标签
     currentLabel = featVec[-1] 
     # 为所有可能的分类创建字典,如果当前的键值不存在,则扩展字典并将当前键值加入字典。每个键值都记录了当前类别出现的次数。
     if currentLabel not in labelCounts.keys(): 
     labelCounts[currentLabel] = 0 
     labelCounts[currentLabel] += 1 
     # 对于 label 标签的占比,求出 label 标签的香农熵
    shannonEnt = 0.0 
     for key in labelCounts: 
     # 使用所有类标签的发生频率计算类别出现的概率。
     prob = float(labelCounts[key])/numEntries 
     # 计算香农熵,以 2 为底求对数
     shannonEnt -= prob * log(prob, 2) 
     return shannonEnt

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值