更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

熵和信息增益

一、熵(Entropy)

熵表示随机变量不确定性的度量。假设离散随机变量\(X\)可以取到\(n\)个值,其概率分布为

\[P(X=x_i)=p_i, \quad i = 1,2,\ldots,n
\]

则\(X\)的熵定义为

\[H(X) = -\sum_{i=1}^n p_i log{p_i}
\]

由于熵只依赖\(X\)的分布,与\(X\)本身的值没有关系,所以熵也可以定义为

\[H(p) = -\sum_{i=1}^n p_i log{p_i}
\]

熵越大,则随机变量的不确定性越大,并且\(0\geq{H(p)}\leq\log{n}\)。

当随机变量只取两个值\(0\)和\(1\)的时候,\(X\)的分布为

\[P(X=1)=p, \quad P(x=0)=1-p, \quad 0\geq{p}\leq{1}
\]

熵则是

\[H(p) = -p\log_2 p-(1-p) \log_2(1-p)
\]

此时随机变量为伯努利分布,熵随概率变化的曲线如下图所示

import numpy as np
from math import log
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc') p = np.arange(0.01, 1, 0.01)
entro = -p*np.log2(p) - (1-p)*np.log2(1-p) plt.plot(p, entro)
plt.title('伯努利分布时熵和概率的关系', fontproperties=font)
plt.xlabel('p')
plt.ylabel('H(p)')
plt.show()

当\(p=0\)和\(p=1\)时熵值为\(0\),此时随机变量完全没有不确定性;当\(p=0.5\)时的熵值最大,随机变量的不确定性最大。

二、条件熵(Conditional Entropy)

假设有随机变量\((X,Y)\),其联合概率为

\[p(X=x_i,Y=y_i), \quad i=1,2,\ldots,n; \quad j=1,2,\ldots,m
\]

条件熵\(H(Y|X)\)表示在已知随机变量\(X\)的条件下随机变量\(Y\)的不确定性,定义为

\[H(Y|X) = \sum_{i=1}^n P(X=x_i) H(Y|X=x_i)
\]

通过公式可以把条件熵理解为在得知某一确定信息的基础上获取另外一个信息时所获得的信息量

当熵和条件熵中的概率由数据估计获得时,所对应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)。

三、联合熵(Joint Entropy)

假设有随机变量\((X,Y)\),其联合概率为

\[p(X=x_i,Y=y_i)=p_{ij}, \quad i=1,2,\ldots,n; \quad j=1,2,\ldots,m
\]

联合熵度量的是一个联合分布的随机系统的不确定性,它的定义为

\[H(X,Y) = -\sum_{i=1}^n \sum_{j=1}^m p(X=x_i,Y=y_j) \log{p(X=x_i,Y=y_j)}
\]

由此可以对联合熵进行简单的化简

\[\begin{align}
H(X,Y) & = -\sum_{i=1}^n \sum_{j=1}^m p(X=x_i,Y=y_j) \log{p(X=x_i,Y=y_j)} \\
& = -\sum_{i=1}^n \sum_{j=1}^m p(X=x_i,Y=y_j) \log{p(X=x_i)\log{p(Y=y_i|X=x_i)}} \\
& = -\sum_{i=1}^n \sum_{j=1}^m p(X=x_i,Y=y_j) \log{p(X=x_i)} -\sum_{i=1}^n \sum_{j=1}^m p(X=x_i,Y=y_j) \log{p(Y=y_i|X=x_i)}\\
& = -\sum_{i=1}^n p(X=x_i) \log{p(X=x_i)} -\sum_{i=1}^n \sum_{j=1}^m p(X=x_i,Y=y_j) \log{p(Y=y_i|X=x_i)} \\
& = H(X) + H(Y|X)
\end{align}
\]

同理可证\(H(X,Y)=H(Y)+H(X|Y)\),即联合熵表示对一个两个随机变量的随机系统,可以先观察一个随机变量获取信息,在这之后可以在拥有这个信息量的基础上观察第二个随机变量的信息量,并且无论先观察哪一个随机变量对信息量的获取都是没有任何影响的

同理可得一个含有\(n\)个独立的随机变量的随机系统\((X_1,X_2,\ldots,X_n)\)的联合熵为

\[H(X_1,X_2,\ldots,X_n) = \sum_{i=1}^n H(X_i)
\]

可以发现即使是含有\(n\)个随机变量的随机系统无论先观察哪一个随机变量对信息量的获取也是没有任何影响的。

四、相对熵(Relative Entropy)

相对熵有时候也称为KL散度 (Kullback–Leibler divergence)。

设\(p(x)\)、\(q(x)\)是离散随机变量\(X\)中取值的两个概率分布,则\(p\)对\(q\)的相对熵是:

\[\begin{align}
DKL(p||q) & = \sum_{i=1}^n p(X=x_i)\log{\frac{p(X=x_i)}{q(X=x_i)}} \\
& = E_{p(X=x_i)}\log{\frac{p(X=x_i)}{q(X=x_i)}}
\end{align}
\]

4.1 相对熵的性质

  1. 如果\(p(x)\)和\(q(x)\)两个分布相同,那么相对熵等于0
  2. \(DKL(p||q)≠DKL(q||p)\),相对熵具有不对称性
  3. \(DKL(p||q)≥0\)(利用Jensen不等式可证)

\[\begin{align}
DKL(p||q) & = \sum_{i=1}^n p(X=x_i)\log{\frac{p(X=x_i)}{q(X=x_i)}} \\
& = - \sum_{i=1}^n p(X=x_i)\log{\frac{q(X=x_i)}{p(X=x_i)}} \\
& = - E_{p(X=x_i)}\log{\frac{q(X=x_i)}{p(X=x_i)}} \\
& \geq -\log{E_{p(X=x_i)}}\log{\frac{q(X=x_i)}{p(X=x_i)}} \\
& = - \log\sum_{i=1}^n p(X=x_i)\log{\frac{q(X=x_i)}{p(X=x_i)}} \\
& = - \log\sum_{i=1}^n q(X=x_i)
\end{align}
\]

其中\(\sum_{i=1}^n q(X=x_i)=1\),得证\(DKL(p||q)≥0\)

4. 相对熵可以用来衡量两个概率分布之间的差异,上面公式的意义就是求\(p\)与\(q\)之间的对数差在\(p\)上的期望值

五、交叉熵(Cross Entropy)

定义:基于相同时间测度的两个概率分布\(p(x)\)和\(q(x)\)的交叉熵是指,当基于一个“非自然”(相对于“真实分布”\(p(x)\)而言)的概率分布\(q(x)\)进行编码时,在时间集合中唯一标识一个事件所需要的平均比特数(使用非真实分布\(q(x)\)所指定的策略消除系统不确定性所需要付出的努力大小)。

假设随机变量\(X\)可以取到\(n\)个值。现在有关于样本集的两个概率分布\(p(X=x_i)\)和\(q(X=x_i)\),其中\(p(X=x_i)\)为真实分布,\(q(X=x_i)\)非真实分布。如果用真实分布\(p(X=x_i)\)来衡量识别别一个样本所需要编码长度的期望(平均编码长度)为:

\[\begin{align}
H(p) & = \sum_{i=1}^n p(X=x_i)\log{\frac{1}{p(X=x_i)}} \\
& = - \sum_{i=1}^n p(X=x_i)\log{p(X=x_i)}
\end{align}
\]

如果使用非真实分布\(q(X=x_i)\)来表示来自真实分布\(p(X=x_i)\)的平均编码长度,则是:

\[H(p,q) = \sum_{i=1}^n p(X=x_i)\log{\frac{1}{q(X=x_i)}}
\]

因为用\(q(X=x_i)\)来编码的样本来自于分布\(q(X=x_i)\),所以\(H(p,q)\)中的概率是\(p(X=x_i)\),此时就将\(H(p,q)\)称之为交叉熵。

举个例子。考虑一个随机变量\(X\),真实分布\(p(X)=({\frac{1}{2}},{\frac{1}{4}},{\frac{1}{8}},{\frac{1}{8}})\),非真实分布\(q(X)=({\frac{1}{4}},{\frac{1}{4}},{\frac{1}{4}},{\frac{1}{4}})\),则\(H(p)=1.75bits \text{最短平均码长}\),交叉熵

\[H(p,q)={\frac{1}{2}}\log_24+{\frac{1}{4}}\log_24+{\frac{1}{8}}\log_24+{\frac{1}{8}}\log_24=2bits
\]

由此可以看出根据非真实分布\(q(X=x_i)\)得到的平均码长大于根据真实分布\(p(X=x_i)\)得到的平均码长,但这种大于是个例还是总是会这样呢?

六、相对熵、交叉熵和熵的关系

此处化简一下相对熵的公式。

\[\begin{align}
DKL(p||q) & = \sum_{i=1}^np(X=x_i)\log{\frac{p(X=x_i)}{q(X=x_i)}} \\
& = \sum_{i=1}^np(X=x_i)\log{p(X=x_i)}−p(X=x_i)\log{q(X=x_i})
\end{align}
\]

如果此时联立熵的公式和交叉熵的公式

\[\begin{align}
熵 & = H(p) \\
& = −\sum_{i=1}^np(X=x_i)\log{p(X=x_i)}
\end{align}
\]

\[\begin{align}
交叉熵 & = H(p,q) \\
& = \sum_{i=1}^n p(X=x_i)\log{\frac{1}{q(X=x_i)}} \\
& = −\sum_{i=1}^np(X=x_i)\log{q(X=x_i)}
\end{align}
\]

即可推出

\[DKL(p||q)=H(p,q)−H(p)
\]

通过上述公式可以得出当用非真实分布\(q(x)\)得到的平均码长比真实分布\(p(x)\)得到的平均码长多出的比特数就是相对熵。

又因为\(DKL(p||q)≥0\),则\(H(p,q)≥H(p)\),当\(p(x)=q(x)\)时,此时交叉熵等于熵。

并且当\(H(p)\)为常量时(注:在机器学习中,训练数据分布是固定的),最小化相对熵\(DKL(p||q)\)等价于最小化交叉熵 \(H(p,q)\)也等价于最大化似然估计。

七、信息增益(Information Gain)

假设有随机变量\((X,Y)\),信息增益表示特征\(X\)的信息而使得类\(Y\)的信息不确定性减少的程度。

特征\(A\)对训练集\(D\)的信息增益记作\(g(D,A)\),则可以把该信息增益定义为集合\(D\)的经验熵与特征\(A\)给定条件下\(D\)的经验条件熵\(H(D|A)\)之差

\[g(D,A) = H(D) - H(D|A)
\]

其中\(H(D)\)表示对数据集\(D\)进行分类的不确定性;\(H(D|A)\)表示在特征\(A\)给定的条件下对数据集\(D\)进行分类的不确定性;\(g(D,A)\)表示由于特征\(A\)而使得对数据集\(D\)的分类的不确定性减少的程度。因此可以发现对于数据集\(D\)而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益,信息增益大的特征具有更强的分类能力。

八、信息增益比(Information Gain Ratio)

假设有随机变量\((X,Y)\),特征\(A\)对数据集\(D\)的信息增益比记作\(g_R(D,A)\),定义为

\[g_R(D,A) = {\frac{g(D,A)}{H_A(D)}}
\]

其中特征熵\(H_A(D) = -\sum_{i=1}^n {\frac{D_i}{D}} \log_2 {\frac{D_i}{D}}\),\(n\)是特征\(A\)的取值个数。

九、一张图带你看懂熵和信息增益

假设有随机变量\((X,Y)\),\(H(X)\)表示\(X\)的熵,\(H(Y)\)表示\(Y\)的熵,\(H(X|Y)\)表示已知\(Y\)时\(X\)的条件熵,\(H(Y|X)\)表示已知\(X\)时\(Y\)的条件熵,\(I(X,Y)\)表示信息增益,\(H(X,Y)\)表示的联合熵。

B-概率论-熵和信息增益的更多相关文章

  1. 通俗理解决策树中的熵&条件熵&信息增益

    参考通俗理解决策树算法中的信息增益 说到决策树就要知道如下概念: 熵:表示一个随机变量的复杂性或者不确定性. 假如双十一我要剁手买一件衣服,但是我一直犹豫着要不要买,我决定买这件事的不确定性(熵)为2 ...

  2. [机器学习]信息&熵&信息增益

    关于对信息.熵.信息增益是信息论里的概念,是对数据处理的量化,这几个概念主要是在决策树里用到的概念,因为在利用特征来分类的时候会对特征选取顺序的选择,这几个概念比较抽象,我也花了好长时间去理解(自己认 ...

  3. 决策树-ID3

    id3:无法直接处理数值型数据,可以通过量化方法将数值型数据处理成标称型数据,但涉及太多特征划分,不建议 决策树:的最大优点在于可以给出数据的内在含义,数据形式非常容易理解: 决策树介绍:决策树分类器 ...

  4. [Machine Learning & Algorithm] 随机森林(Random Forest)

    1 什么是随机森林? 作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来 ...

  5. 从决策树学习谈到贝叶斯分类算法、EM、HMM --别人的,拷来看看

    从决策树学习谈到贝叶斯分类算法.EM.HMM     引言 最近在面试中,除了基础 &  算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全 ...

  6. ID3决策树---Java

    1)熵与信息增益: 2)以下是实现代码: //import java.awt.color.ICC_ColorSpace; import java.io.*; import java.util.Arra ...

  7. 决策树之ID3算法实现(python)

    决策树的概念其实不难理解,下面一张图是某女生相亲时用到的决策树: 基本上可以理解为:一堆数据,附带若干属性,每一条记录最后都有一个分类(见或者不见),然后根据每种属性可以进行划分(比如年龄是>3 ...

  8. 从决策树学习谈到贝叶斯分类算法、EM、HMM

    从决策树学习谈到贝叶斯分类算法.EM.HMM                (Machine Learning & Recommend Search交流新群:172114338) 引言 log ...

  9. 决策树学习笔记(Decision Tree)

    什么是决策树? 决策树是一种基本的分类与回归方法.其主要有点事模型具有可得性,分类速度快.学习时,利用训练数据,根据损失函数最小化原则建立决策树模型:预测时,对新数据,利用决策树模型进行分类. 决策树 ...

随机推荐

  1. 小白专场-树的同构-c语言实现.md

    目录 一.题意理解 二.求解思路 2.1 二叉树表示 2.2 程序框架搭建 2.3 如何建二叉树 2.4 如何判别两二叉树同构 更新.更全的<数据结构与算法>的更新网站,更有python. ...

  2. ListView 字母导航排序

    一.概述 ListView字母导航排序,网上已经有很多代码和博客了, 这篇博文也是照搬网上的.  之所以写到这里,不是为了说明什么,只是为了以后自己查阅方便.本来公司要求实现expandablelis ...

  3. 线上问题排查神器 Arthas

    线上问题排查神器 Arthas 之前介绍过 BTrace,线上问题排查神器 BTrace 的使用,也说它是线上问题排查神器.都是神器,但今天这个也很厉害,是不是更厉害不好说,但是使用起来非常简单.如果 ...

  4. 在nginx日志access log可以记录POST请求的参数值

    1)      在nginx日志access log可以记录POST请求的参数值 实现程度:日志中可以显示POST请求所提交的参数值 问题: 日志中文显示十六进制(在配置文件中配置中文也无效) 没有对 ...

  5. Git 从入门到熟练|不敢说精通

    前言 如果有一定版本管理软件基础或使用过 svn 的你,这篇 git 的文章应该是最适合你的.作者也是从 svn 过来,从开始的觉得 git 麻烦,到最后还是感觉 git 是最好用的版本控制软件. 虽 ...

  6. MYSQL之查询篇

    2. 数据库操作 数据库在创建以后最常见的操作便是查询 2.1 查询 为了便于学习和理解,我们预先准备了两个表分别是stduents表和classes表两个表的内容和结构如下所示 students表的 ...

  7. 52 (OC)* 苹果手机各种尺寸详细表以及iPhoneX、iPhoneXS、iPhoneXR、iPhoneXSMax屏幕适配

     iPhone设备 物理分辨率是硬件所支持的,逻辑分辨率是软件可以达到的. 代数 设备 操作系统 逻辑分辨率(point) 物理分辨率(pixel) 屏幕尺寸(对角线长度) 缩放因子   iPhone ...

  8. java接收控制台输入

    java控制台输入语句: Scanner sc = new Scanner(System.in); 通过一个变量,例如 int r; r = sc.nextInt();   例子: public st ...

  9. 文章导航-readme

    Spring-Boot Spring Boot(一) Hello World Redis 图解Redis之数据结构篇--简单动态字符串SDS 图解Redis之数据结构篇--链表 图解Redis之数据结 ...

  10. JAVA设计模式-动态代理(Proxy)示例及说明

    在Mybatis源码解析,一步一步从浅入深(五):mapper节点的解析文章的最后部分,我们提到了动态代理的概念,下面我们就简单了解一下动态代理. 一,概念 代理设计模式的目的就是在不直接操作对象的前 ...