信息、信息熵、条件熵、信息增益、信息增益率、GINI指数、交叉熵、相对熵

2023-12-17 00:59

本文主要是介绍信息、信息熵、条件熵、信息增益、信息增益率、GINI指数、交叉熵、相对熵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在信息论与概率统计学中,熵(entropy)是一个很重要的概念。在机器学习与特征工程中,熵的概念也常常是随处可见。自己在学习的过程中也会常常搞混,于是决定将所有与熵有关的概念整理总结,方便查看和学习。

1. 信息

它是熵和信息增益的基础概念。引用香农的话,信息是用来消除随机不确定性的东西。如果一个带分类的事物集合可以划分为多个类别,则其中某个类(xi)的信息定义:

                                                               I(X=x_{i})=-log_{2}p(x_{i})

I(X)用来表示随机变量的信息,p(xi)指是当yi发生时的概率。

2. 信息熵

Shannon在信息论中指出,信息的不确定性可以用熵来表示。在信息论和概率论中熵是对随机变量不确定性的度量,熵其实就是信息的期望值。假设对于一个取有限个值的随机变量Y,其概率分布为:

                                                           P(X=x_{i})=p(x_{i})     i=1,2,3...n

那么随机变量Y的熵可以记作:

                                                          H(X)=\sum_{i=1}^{n}p(x_{i})I(x_{i})=-\sum_{i=1}^{n}p(x_{i})logp(x_{i})

熵只依赖X的分布,和X的取值没有关系。熵是用来度量不确定性,当熵越大,概率说 X=xi 的不确定性越大,反之越小。在机器学习中,熵越大即这个类别的不确定性更大,反之越小,当随机变量的取值为两个时,熵随概率的变化曲线如下图:

当p=0或p=1时,H(p)=0,随机变量完全没有不确定性。当p=0.5时,H(p)=1,此时随机变量的不确定性最大。

3. 条件熵

条件熵是用来解释信息增益而引入的概念。

概率定义:随机变量X在给定条件下随机变量Y的条件熵。即X给定条件下Y的条件概率分布的熵对X的数学期望。

在机器学习中为选定某个特征后的熵,公式如下:

              H(Y/X)=\sum_{i,j}p(x)H(Y/X=x_{i})=-\sum_{i,j}p(x_{i},y_{j})logp(y_{j}/x_{i})=-\sum_{i,j}p(y_{j}/x_{i})p(x_{i})logp(y_{j}/x_{i})

举一简单的例子,假设有数据集D,包含K个类别,每个数据样本中又含有M个特征属性,如果现在按照特征属性A将数据集D划分为两个独立的子数据集D1和D2,则此时整个数据集D的熵就是两个独立数据集D1的熵和数据集D2的熵的加权和,即:

                                          Entropy(D)=\frac{|D1|}{|D|}Entropy(D1)+\frac{|D2|}{|D|}Entropy(D2)

于是便有

                                        Entropy(D)=-\left ( \frac{|D1|}{|D|}\sum_{k=1}^{K} p_{k}log_{2}p_{k}+ \frac{|D2|}{|D|}\sum_{k=1}^{K} p_{k}log_{2}p_{k}\right )

其中,pk表示第k类的样本所占的比例,|D1|、|D2|分别表示数据集D1和D2中样本的个数。

因为此处的熵 Entropy(D)是在将所有样本按照其中一特征属性m划分为子样本集D1和D2的条件下计算出来的,因此又称之为条件熵

4. 信息增益

在概率中定义为:待分类的集合的熵和选定某个特征的条件熵之差(这里只的是经验熵或经验条件熵,由于真正的熵并不知道,是根据样本计算出来的),公式如下:

                        IG(Y/X)=H(Y)-H(Y/X)=[-\sum_{j}p(y_{i})logp(y_{j})]-[-\sum_{i,j}p(y_{j}/x_{i})p(x_{i})logp(y_{j}/x_{i})]

此处仍然以条件熵中的例子来分析,对于给定的数据集,划分前后信息熵的变化量(其实是减少量,因为条件熵肯定小于之前的信息熵)称之为信息增益,即:

                                              igain(D,A)=[-\sum_{k=1}^{K}p_{k}log_{2}p_{k}]-\sum_{p=1}^{P}\frac{|D_{p}|}{|D|}Entropy(D_{p})

其中,|Dp|表示属于第p类的样本的个数。

信息熵表征的是数据集中的不纯度,信息熵越小表明数据集纯度越大。ID3决策树算法就是利用信息增益作为划分数据集的一种方法。信息增益在决策树算法中是用来选择特征的指标,信息增益越大,则这个特征的选择性越好。信息增益做特征选择的优缺点:

优点:

        1.信息增益考虑了特征出现与不出现的两种情况,比较全面,一般而言效果不错。
        2.使用了所有样例的统计属性,减小了对噪声的敏感度。
        3.容易理解,计算简单。

缺点:

      1.信息增益考察的是特征对整个系统的贡献,没有到具体的类别上,所以一般只能用来做全局的特征选择,而没法针对单个类别做特征选择。
      2.只能处理连续型的属性值,没法处理连续值的特征。
      3.算法天生偏向选择分支多的属性,容易导致overfitting。

5. 信息增益率

在信息增益提到,信息增益做特征选择的其中一个缺点就是:算法天生偏向选择分支多的属性导致overfitting。解决办法就是对分支过多的情况进行惩罚(penalty),于是就有了信息增益率(信息增益比)。

特征X的熵:

                                                    H(X)=-\sum_{i=1}^{n}p(x_{i})logp(x_{i})

特征X的信息增益:

                                                   IG(X)=H(Y)-H(Y/X)

信息增益率为:

                                                   g_{r}=\frac{IG(X)}{H_{m}(X)}=\frac{H(Y)-H(Y/X)}{H_{m}(X)}

此处仍然以条件熵中的例子来分析,在机器学习中,信息增益率也是选择最优划分属性的一种方法,其定义:

                                                      gain_ratio(D,A)=\frac{igain(D,A)}{IV(A)}

其中,IV(A)被称为特征属性A的“固定值”,即:

                                                          IV(A)=-\sum_{p=1}^{P}\frac{|D_{p}|}{|D|}log_{2}\frac{|D_{p}|}{|D|}

其中,|Dp|表示属于第p类的样本的个数。在决策树算法中,ID3使用信息增益,而c4.5决策树算法使用就是信息增益率。

6. GINI指数

Gini指数是一种与信息熵类似的做特征选择的方式,可以用来表征数据的不纯度。在CART(Classification and Regression Tree)算法中利用基尼指数构造二叉决策树。Gini系数的计算方式如下:

                                                      Gini(D) = \sum_{i=1}^{n}p(x_{i})\cdot [1-p(x_{i})]=1-\sum_{i=1}^{n}p(x_{i})^{2}

其中,D表示数据集全体样本,p(xi)表示每种类别出现的概率。

取个极端情况,如果数据集中所有的样本都为同一类,那么有p0=1,Gini(D)=0,显然此时数据的不纯度最低。与信息增益类似,我们可以计算如下表达式:

                                                           \bigtriangleup Gini(X)=Gini(D)-Gini_{X}(D)

上式表示,加入特征X以后,数据不纯度减小的程度。很明显,在做特征选择的时候,我们可以取ΔGini(X)最大的那个。

此处仍然以条件熵中的例子来分析,以特征属性A将数据集D划分为独立的两个数据集D1和D2,则此时基尼指数为:

                                                   Gini(D,A)=\frac{|D1|}{|D|}Gini(D1)+\frac{|D2|}{|D|}Gini(D2)

在机器学习中,CART决策树算法就是利用GINI指数作为划分数据集的标准。

7. 交叉熵

假设现有样本集的2个概率分布p和q,其中p为真实分布,q非真实分布。按照真实分布p来衡量识别一个样本的熵,即基于分布p给样本进行编码的最短平均编码长度为:

                                                               H(X)=-\sum_{i=1}^{n}p(x_{i})logp(x_{i})

如果使用非真实分布q来给样本进行编码,则是基于分布q的信息量的期望(最短平均编码长度),由于用q来编码的样本来自分布p,所以期望与真实分布一致。所以基于分布q的最短平均编码长度为:

                                                           CEH(p,q)=-\sum_{i=1}^{n}p(x_{i})log q(x_{i})

上式CEH(p, q)即为交叉熵的定义。

8. 相对熵

将由q得到的平均编码长度比由p得到的平均编码长度多出的bit数,即使用非真实分布q计算出的样本的熵(交叉熵),与使用真实分布p计算出的样本的熵差值,称为相对熵,又称KL散度

                                                  KL(p,q)=CEH(p,q)-H(p) =\sum_{i=1}^{n}p(x_{i})log\frac{p(x_{i})}{q(x_{i})}

相对熵(KL散度)用于衡量两个概率分布p和q的差异。注意,KL(p, q)意味着将分布p作为真实分布,q作为非真实分布,因此:

                                                                           KL(p,q)\neq KL(q,p)

参考资料:

http://www.cnblogs.com/fantasy01/p/4581803.html?utm_source=tuicool

https://blog.csdn.net/xbmatrix/article/details/56691137

https://blog.csdn.net/bitcarmanlee/article/details/51488204

https://www.cnblogs.com/muzixi/p/6566803.html

 

这篇关于信息、信息熵、条件熵、信息增益、信息增益率、GINI指数、交叉熵、相对熵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/502535

相关文章

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

Linux命令(11):系统信息查看命令

系统 # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostname # 查看计算机名# lspci -tv # 列出所有PCI设备# lsusb -tv

【小迪安全笔记 V2022 】信息打点9~11

第9天 信息打点-CDN绕过篇&漏洞回链8接口探针&全网扫指&反向件 知识点: 0、CDN知识-工作原理及阻碍 1、CDN配置-域名&区域&类型 2、CDN绕过-靠谱十余种技战法 3、CDN绑定-HOSTS绑定指向访问 CDN 是构建在数据网络上的一种分布式的内容分发网。 CDN的作用是采用流媒体服务器集群技术,克服单机系统输出带宽及并发能力不足的缺点,可极大提升系统支持的并发流数目,减少或避

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;

Java了解相对较多!

我是对Java了解相对较多,而对C#则是因工作需要才去看了一下,C#跟Java在语法上非常相似,而最初让我比较困惑的就是委托、事件部分,相信大多数初学者也有类似的困惑。经过跟Java的对比学习,发现这其实跟Java的监听、事件是等同的,只是表述上不同罢了。   委托+事件是观察者模式的一个典型例子,所谓的委托其实就是观察者,它会关心某种事件,一旦这种事件被触发,这个观察者就会行动。   下

Python批量读取身份证信息录入系统和重命名

前言 大家好, 如果你对自动化处理身份证图片感兴趣,可以尝试以下操作:从身份证图片中快速提取信息,填入表格并提交到网页系统。如果你无法完成这个任务,我们将在“Python自动化办公2.0”课程中详细讲解实现整个过程。 实现过程概述: 模块与功能: re 模块:用于从 OCR 识别出的文本中提取所需的信息。 日期模块:计算年龄。 pandas:处理和操作表格数据。 PaddleOCR:百度的

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,