李宏毅机器学习-task7

本文深入探讨了信息熵的概念,介绍了信息熵如何衡量信息的不确定性,并解释了香农熵在信息论中的应用。通过实例代码展示了如何计算数据集的香农熵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:https://datawhalechina.github.io/Leeml-Book/#/AdditionalReferences/Entropy

1、信息熵

熵 (entropy) 这一词最初来源于热力学。1948年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy),信息熵 (information entropy)。首先,我们先来理解一下信息这个概念。信息是一个很抽象的概念,百度百科将它定义为:指音讯、消息、通讯系统传输和处理的对象,泛指人类社会传播的一切内容。那信息可以被量化么?可以的!香农提出的“信息熵”概念解决了这一问题。

一条信息的信息量和它的不确定性有着直接的关系。比如说,我们需要搞清楚一件非常非常不确定的事,或者是我们一无所知的事,就需要了解大量的信息。相反,如果我们对某件事已经有了较多的了解,我们就不需要太多的信息就能把它搞清楚。所以,从这个角度,我们可以认为,信息量的度量就等于不确定性的多少

由定义可知,熵只依赖于X的分布,而与X的取值无关,所以也可将X的熵记作H(p),即

2、信息熵公式的理解

信息熵

  • 信息熵是信息量的数学期望

条件熵

联合熵

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

代码是机器学习实战里面的

import numpy as np
def cancShannonEnt(dataSet):
  '''
  :param dataSet: dataSet
  :return: shannonEnt
  '''
  # 计算公式前,注意数据的格式(array)
  numEntries = len(dataSet)   # 获取数据的行数
  labelCounts = { }    # 设置字典数据格式,想要存储的数据格式为:类别:频数
  for featVec in dataSet:   # 获取数据集每一行的数据
      currentLabel = featVec[-1]   # 获取特征向量的最后一列
      # 检查字典中key是否存在
      # 如果key不存在
      if currentLabel not in labelCounts.keys():
          # 将当前的标签存于字典中,并将频数置为0
          labelCounts[currentLabel] = 0
      # 如果key存在,在当前的键值上+1
      labelCounts[currentLabel] +=1

  # 数据已准备好,计算熵
  shannonEnt = 0.0          # 初始化信息熵
  for key in labelCounts:   # 遍历出数据中所的类别
      pro = float(labelCounts[key]) /numEntries   
      shannonEnt -= pro * np.log(pro, 2)  # 计算信息熵
  return shannonEnt                       # 返回信息熵
        

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值