更新、更全的《机器学习》的更新网站,更有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. vim命令的三种模式

    对于vim这个命令来讲是有三种模式的,分别是:正常模式,编辑模式以及命令模式.接下来就写一个demo作为演示 前期准备,先在本地准备一个文档,我这里就写了一个大家耳熟能详的例子,如下: 然后用rz命令 ...

  2. IDC是什么?

    IDC:互联网数据中心,是电信部门利用已有的互联网通信线路.贷款资源,建立标准化的电信专业级机房环境,为企业.政府提供服务器托管.服务器租用以及相关增值等方面服务.IDC是全球协作的特定设备网络,用来 ...

  3. Docker搭建disconf环境,三部曲之一:极速搭建disconf

    Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...

  4. mysql之innodb存储引擎---BTREE索引实现

    在阅读本篇文章可能需要一些B树和B+树的基础 一.B树和B+树的区别 1.B树的键值不会出现多次,而B+树的键值一定会出现在叶子节点上,而且在非叶子节点也可能会重复出现2.B数存储真实数据,B+数叶子 ...

  5. Docker 学习线路

    起因 之前的几篇博客,需要一定的docker知识(虽然可以直接上手),但是对于没有docker基础的人来说是不知道为什么要这样做的. 我把之前学习docker的步骤整理出来,希望可以帮助更多的人去学习 ...

  6. postman--请求以及变量设置的实例练习

    我们可以在2个地方添加需要执行的js脚本,一个是Pre-request Script,还有一个tests,我们先看请求之前的 1 在请求被发送到服务器之前:就是在“Pre-request Script ...

  7. Unity基础:AR(增强现实)的学习

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  8. GO 语言学习笔记--数组切片篇

    1.对于make 数组切片,长度和容量需要理解清楚: 容量表示底层数组的大小,长度是你可以使用的大小: 容量的用处在哪?在与当你用 appen d扩展长度时,如果新的长度小于容量,不会更换底层数组,否 ...

  9. 【第十六篇】这一次要写的是bootstrap-table

    先上图吧这就是效果图 上代码(这一部分是工具栏的,还包括slider滑动条) <div class="box-body"> <div class="ro ...

  10. C#将数据导入到excel文件

    最近在做C#对excel的操作程序,简单的与datagridview的交互如下 using System;using System.Collections.Generic;using System.C ...