【机器学习】信息熵和信息度量

news2024/12/22 20:51:57

一、说明

        信息熵是概率论在信息论的应用,它简洁完整,比统计方法更具有计算优势。在机器学习中经常用到信息熵概念,比如决策树、逻辑回归、EM算法等。本文初略介绍一个皮毛,更多细节等展开继续讨论。

二、关于信息熵的概念 

2.1 要素描述

        信息熵:熵是一种测量随机变量 X 的不确定性/随机性的方法。它有几个要素:

  • 1)针对一个数据分布,现实中,是一组同母体的数据采样。
  • 2)是对自身内部数据的不确定度量,这种度量是期望。
  • 3)对于所有的分布,均匀分布不确定程度最大,没有更大的不确定性。
  • 4)高斯分布不确定性程度最小,因为高斯分布有明确的核心,因此,很确定它就是一组μ附近的数据。

2.2 信息熵的数学表示:

    1   连续概率分布:

                S =- \int f(x)*log(\frac{1}{f(x)}) dx

    2   离散概率分布

        S =- \sum_i^n p(i)*log(\frac{1}{p(i)})

2.3 联合熵(Joint Entropy)

         一对离散随机变量 X, Y ~ p (x, y) 的联合熵是指定它们的值平均所需的信息量。

        联合熵是联合概率分布的不确定性或随机性的度量。它用于量化两个或多个随机变量一起包含的信息量。换句话说,联合熵是对由多个变量组成的系统中存在多少不确定性的度量。它通常用于信息论、通信理论和信号处理中,以评估信号或数据集中的信息量。在数学上,联合熵定义为所有可能结果的概率乘以它们的对数(以 2 为底)的负和。对于两个随机变量 X 和 Y,用 H(X,Y) 表示。

 性质:

1)非负性

2)整体大于局部:(整体信息不确定程度大于局部)

 3)整体熵小于局部之和

2.4 条件熵(Conditional Entropy

        条件熵:给定另一个 X 的随机变量 Y 的条件熵表示,在假定另一方知道 X 的情况下,一个人平均仍需要提供多少额外信息来传达 Y。

 注意:条件熵也可以看成p(x,y)和p(x)的相对熵,也就是p(x,y)和p(x)的距离。

2.5 示例: 计算公平硬币的熵 

 

        这里,公平硬币的熵最大,即 1。随着硬币偏差的增加,信息/熵减少。下面是熵与偏差的关系图,曲线如下所示:

2.6 交叉熵:

        交叉熵是给定随机变量或事件集的两个概率分布(p 和 q)之间差异的度量。换句话说,交叉熵是当我们使用模型 q 时对分布源 p 的数据进行编码所需的平均位数。

三、Kullback-Leibler 散度

3.1 KL散度定义

        KL 散度是给定随机变量或事件集的两个概率分布之间的相对差异的度量。 KL 散度也称为相对熵。可以通过以下公式计算:

3.2 ​交叉熵和 KL 散度之间的区别 

        交叉熵计算表示分布 q 中的事件所需的总分布,而不是 p ,而 KL 散度表示表示分布中的事件所需的额外位数q 而不是 p。

3.3 KL 散度的性质

  1. D(p || q) 始终大于或等于 0。
  2. D(p || q) 不等于 D(q || p)。 KL 散度不具有交换性 。
  3. 如果 p=q,则 D(p || q) 为 0。

四、示例和实现 

        假设有两个盒子,里面装有 4 种类型的球(绿、蓝、红、黄)。从盒子中随机抽取一个具有给定概率的球。我们的任务是计算两个框的分布差异,即 KL 散度。

代码:解决这个问题的Python代码实现。

# box =[P(green),P(blue),P(red),P(yellow)]

box_1 = [0.25, 0.33, 0.23, 0.19]

box_2 = [0.21, 0.21, 0.32, 0.26]

import numpy as np

from scipy.special import rel_entr

def kl_divergence(a, b):

    return sum(a[i] * np.log(a[i]/b[i]) for i in range(len(a)))

   

print('KL-divergence(box_1 || box_2): %.3f ' % kl_divergence(box_1,box_2))

print('KL-divergence(box_2 || box_1): %.3f ' % kl_divergence(box_2,box_1))

# D( p || p) =0

print('KL-divergence(box_1 || box_1): %.3f ' % kl_divergence(box_1,box_1))

print("Using Scipy rel_entr function")

box_1 = np.array(box_1)

box_2 = np.array(box_2)

print('KL-divergence(box_1 || box_2): %.3f ' % sum(rel_entr(box_1,box_2)))

print('KL-divergence(box_2 || box_1): %.3f ' % sum(rel_entr(box_2,box_1)))

print('KL-divergence(box_1 || box_1): %.3f ' % sum(rel_entr(box_1,box_1)))

Output:

KL-divergence(box_1 || box_2): 0.057 
KL-divergence(box_2 || box_1): 0.056 
KL-divergence(box_1 || box_1): 0.000 
Using Scipy rel_entr function
KL-divergence(box_1 || box_2): 0.057 
KL-divergence(box_2 || box_1): 0.056 
KL-divergence(box_1 || box_1): 0.000 

五、KL散度的应用:

        熵和 KL 散度有许多有用的应用,特别是在数据科学和压缩方面。

        熵可用于数据预处理步骤,例如特征选择。例如,如果我们想根据主题对不同的 NLP 文档进行分类,那么我们可以检查文档中出现的不同单词的随机性。 “计算机”一词出现在技术相关文档中的可能性更大,但“the”一词则不然。
熵还可以用于文本压缩和量化压缩。包含某种模式的数据比随机的数据更容易压缩。
        KL 散度还用于许多 NLP 和计算机视觉模型(例如变分自动编码器)中,以比较原始图像分布和从编码分布生成的图像分布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/674896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

尚硅谷课程vue学习(一)

目录 data两种写法el两种写法由vue管理的函数,一定不要写箭头函数,不然this指向windows实例了MVVM模型defineProperty属性数据代理v-on: v-bind:键盘事件keyup keydowncomputed计算属性监视属性watch监视属性和计算属性区别绑定class和style属性条件渲染…

cocosCreator 3.3~6 安卓热更新官方详细示例

官方的热更新虽给出了示例和源码,但是一些细节的地方和步骤还是没说清楚,导致新手包括我死活是运行不起来,热更新失败!很打击人啊。这里有必要给出新手的热更新步骤,前提是你安装了Node.js和python环境,我装…

chatgpt赋能python:更新Python所有库,避免安全漏洞和兼容性问题!

更新 Python 所有库,避免安全漏洞和兼容性问题! Python 是当今最受欢迎的编程语言之一,拥有强大而多功能的 API 和丰富的第三方库来支持开发,如 numpy、pandas、tensorflow 等等。但是,这些库不断地更新与改进&#x…

端午作业1

只要文件存在,就会有唯一对应的inode号,且相应的会存在一个struct inode结构体。在应用层通过open()打开一个设备文件,会对应产生一个inode号,通过inode号可以找到文件的inode结构体 根据inode结构体中文件…

【Dart语言解密】想要深入了解Dart语法和类型变量吗?

快来读读这篇文章吧!本文从Dart信息表示的角度出发,详细讲解了Dart的基础语法和类型变量。通过本文的学习,你将会对Dart语言有更深入的认识和理解,更好地掌握Dart的开发技巧和实践应用。快来一起解密Dart语言吧! 1 Da…

数据透视表 - 学习笔记

教程资源:数据透视表_哔哩哔哩_bilibili 目录 一、内容概括 数据操作: 案例: 二、数据操作 (一)数据清洗 (二)创建数据透视表 1、数据格式 2、显示方式 3、分组 4、修改数据源 5、…

Web 安全之 HSTS 详解和使用

HSTS(HTTP Strict Transport Security) 是一种网络安全机制,可用于防范网络攻击,例如中间人攻击和 CSRF(Cross-Site Request Forgery)等攻击。本文将详细介绍 HSTS 的工作原理、应用场景以及如何在网站中开…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于分类和分割的学术速递(6月 22 日论文合集)

文章目录 一、分类相关(4篇)1.1 Annotating Ambiguous Images: General Annotation Strategy for Image Classification with Real-World Biomedical Validation on Vertebral Fracture Diagnosis1.2 Benchmark data to study the influence of pre-training on explanation pe…

无需专业知识!学会用TensorFlow 2实现天气识别的秘诀

💡《目标识别100例》使用的是Python语言、TensorFlow框架,包含了几十种CNN算法案例💎 附有 🖥 源码 ,可一键运行,避免调试烦恼🏆 课程大作业、毕业论文可直接考借鉴🎈 同时 附带各种算法原理及对应的代码教程,用户可根据自身情况快速排列组合,在不同的数据集上实…

从零开始:入门双目视觉你需要了解的知识

文章目录 前言 双目相机标定去畸变极线校正(立体校正)立体匹配深度图生成文章已经同步更新在3D视觉工坊啦,原文链接如下: 前言 双目立体视觉是计算机视觉中的一个重要领域,它利用两个相机拍摄同一场景的不同视角的图像…

HDLBits笔记5:Circuits.Combinational Logic.Basic gates

Wire 实现一个电路完成in和out的连线 module top_module (input in, output out);assign out in; endmoduleGND 实现一个电路将out连到GND module top_module (output out);assign out 1b0; endmoduleNOR 实现或非门 module top_module (input in1,input in2,output ou…

Vue-消息订阅与发布(pub/sub)

消息订阅与发布(pub/sub) 消息订阅与发布和全局事件总线一样,也是一种组件间通信的方式 pub/sub全称为publisher(订阅)/subscriber(发布),一般需要数据的人订阅消息,提供数据的人发布消息 这个技术非常简单容易上手,主要有以下两步 1 订阅…

Java集合之ArrayList详解

Java集合之ArrayList 一、ArrayList类的继承关系1. 基类功能说明1.1. Iterator:提供了一种方便、安全、高效的遍历方式。1.2. Collection:为了使ArrayList具有集合的基本特性和操作。1.3. AbstractCollection:提供了一些通用的集合操作。1.4.…

Vue-动画效果

vue动画效果 vue中动画效果是很简单的一个东西,vue帮助我们做了一些动画封装,同时也支持自定义动画,过度,第三方库,这些方式都可以实现,我们一一举例说明 注意:下面的相关截图,由于…

55 KVM工具使用指南-LibcarePlus概述

文章目录 55 KVM工具使用指南-LibcarePlus概述55.1 概述55.2 软硬件要求55.3 注意事项和约束 55 KVM工具使用指南-LibcarePlus概述 55.1 概述 LibcarePlus 是一个用户态进程热补丁框架,可以在不重启进程的情况下对 Linux 系统上运行的目标进程进行热补丁操作。热补…

语音合成 - TTS-VUE 学习

今天给小伙伴测试了一款人工智能文字合成语音的工具,测试中发现应该是某位大神开发的开源工具,经过一下午的测试,发现有可学习之处,有兴趣的小伙伴可以一起来学习下。 一、简单介绍 微软的语音合成助手利用强大的微软AI语音库&am…

牛云企业官网小程序,外卖cps权益变现,uniCloud云开发无需购买服务器和域名,助力每一位创业者。

技术优势 基于 uniapp uniCloud 研发,无需购买服务器和域名,uniCloud 是 DCloud 联合阿里云、腾讯云 serverless 构建。从此不用关心服务器运维、弹性扩容、大并发承载、防DDoS攻击等,轻松应对高并发应用, 上图 小程序页面 体…

一种新颖的智能优化算法-蝠鲼优化算法(MRFO)

目录 一、MRFO数学模型 1.1 链式觅食 1.2 旋风式觅食 1.3 翻筋斗式觅食 二、MRFO伪代码 2019年提出一种新的仿生优化技术称为魔鬼鱼觅食优化算法,旨在提供一种替代优化 解决实际工程问题的方法。该算法的灵感是基于智能算法魔鬼鱼的行为。这项工作模拟了魔鬼…

轻量应用服务器性能如何?CPU带宽流量系统盘测评

轻量应用服务器性能如何?腾讯云轻量应用服务器是一种轻量级搭建小型网站和应用的服务器,相对于其他更高性能配置的服务器CVM,性价比更高。虽然其性能不如高性能云服务器CVM,但对于小型网站和应用来说,能够提供基本的计…

JDK1.8 lambda_函数式编程_stream流

一、 lambda表达式 jdk 1.8 引入了 lambda表达式 能够我们 编写代码时更加简洁,也为函数式编程提供了支持 lambda表达式 作用 简化匿名实现类的书写,实现接口抽象方法; (参数类型 参数名1,参数类型 参数名2,……参数类型 参数名n)->{ //方法体 } …