信息、信息熵、条件熵、信息增益、信息增益率、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

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

自研四振子全向增益天线! 中兴问天BE6800Pro+路由器拆机和详细评测

《自研四振子全向增益天线!中兴问天BE6800Pro+路由器拆机和详细评测》中兴问天BE6800Pro+路由器已经上市,新品配备自研四振子全向增益天线,售价399元,国补到手339.15元,下面我们... 中兴问天BE6800Pro+路由器自上市以来,凭借其“旗舰性能,中端价格”的定位,以及搭载三颗自研芯片

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

springboot实现配置文件关键信息加解密

《springboot实现配置文件关键信息加解密》在项目配置文件中常常会配置如数据库连接信息,redis连接信息等,连接密码明文配置在配置文件中会很不安全,所以本文就来聊聊如何使用springboot... 目录前言方案实践1、第一种方案2、第二种方案前言在项目配置文件中常常会配置如数据库连接信息、Red

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文