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

相关文章

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

使用Python检查CPU型号并弹出警告信息

《使用Python检查CPU型号并弹出警告信息》本教程将指导你如何编写一个Python程序,该程序能够在启动时检查计算机的CPU型号,如果检测到CPU型号包含“I3”,则会弹出一个警告窗口,感兴趣的小... 目录教程目标方法一所需库步骤一:安装所需库步骤二:编写python程序步骤三:运行程序注意事项方法二

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批