B-概率论-熵和信息增益
更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html
熵和信息增益
一、熵(Entropy)
熵表示随机变量不确定性的度量
。假设离散随机变量\(X\)可以取到\(n\)个值,其概率分布为
\]
则\(X\)的熵定义为
\]
由于熵只依赖\(X\)的分布,与\(X\)本身的值没有关系,所以熵也可以定义为
\]
熵越大,则随机变量的不确定性越大,并且\(0\geq{H(p)}\leq\log{n}\)。
当随机变量只取两个值\(0\)和\(1\)的时候,\(X\)的分布为
\]
熵则是
\]
此时随机变量为伯努利分布,熵随概率变化的曲线如下图所示
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)\),其联合概率为
\]
条件熵\(H(Y|X)\)表示在已知随机变量\(X\)的条件下随机变量\(Y\)的不确定性,定义为
\]
通过公式可以把条件熵理解为在得知某一确定信息的基础上获取另外一个信息时所获得的信息量
。
当熵和条件熵中的概率由数据估计获得时,所对应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)。
三、联合熵(Joint Entropy)
假设有随机变量\((X,Y)\),其联合概率为
\]
联合熵度量的是一个联合分布的随机系统的不确定性,它的定义为
\]
由此可以对联合熵进行简单的化简
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)\)的联合熵为
\]
可以发现即使是含有\(n\)个随机变量的随机系统无论先观察哪一个随机变量对信息量的获取也是没有任何影响的。
四、相对熵(Relative Entropy)
相对熵有时候也称为KL散度 (Kullback–Leibler divergence)。
设\(p(x)\)、\(q(x)\)是离散随机变量\(X\)中取值的两个概率分布,则\(p\)对\(q\)的相对熵是:
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 相对熵的性质
- 如果\(p(x)\)和\(q(x)\)两个分布相同,那么相对熵等于0
- \(DKL(p||q)≠DKL(q||p)\),相对熵具有不对称性
- \(DKL(p||q)≥0\)(利用Jensen不等式可证)
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)\)来衡量识别别一个样本所需要编码长度的期望(平均编码长度)为:
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)\)的平均编码长度,则是:
\]
因为用\(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{最短平均码长}\),交叉熵
\]
由此可以看出根据非真实分布\(q(X=x_i)\)得到的平均码长大于根据真实分布\(p(X=x_i)\)得到的平均码长,但这种大于是个例还是总是会这样呢?
六、相对熵、交叉熵和熵的关系
此处化简一下相对熵的公式。
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}
\]
如果此时联立熵的公式和交叉熵的公式
熵 & = H(p) \\
& = −\sum_{i=1}^np(X=x_i)\log{p(X=x_i)}
\end{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}
\]
即可推出
\]
通过上述公式可以得出当用非真实分布\(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)\)之差
\]
其中\(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)\),定义为
\]
其中特征熵\(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-概率论-熵和信息增益的更多相关文章
- 通俗理解决策树中的熵&条件熵&信息增益
参考通俗理解决策树算法中的信息增益 说到决策树就要知道如下概念: 熵:表示一个随机变量的复杂性或者不确定性. 假如双十一我要剁手买一件衣服,但是我一直犹豫着要不要买,我决定买这件事的不确定性(熵)为2 ...
- [机器学习]信息&熵&信息增益
关于对信息.熵.信息增益是信息论里的概念,是对数据处理的量化,这几个概念主要是在决策树里用到的概念,因为在利用特征来分类的时候会对特征选取顺序的选择,这几个概念比较抽象,我也花了好长时间去理解(自己认 ...
- 决策树-ID3
id3:无法直接处理数值型数据,可以通过量化方法将数值型数据处理成标称型数据,但涉及太多特征划分,不建议 决策树:的最大优点在于可以给出数据的内在含义,数据形式非常容易理解: 决策树介绍:决策树分类器 ...
- [Machine Learning & Algorithm] 随机森林(Random Forest)
1 什么是随机森林? 作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来 ...
- 从决策树学习谈到贝叶斯分类算法、EM、HMM --别人的,拷来看看
从决策树学习谈到贝叶斯分类算法.EM.HMM 引言 最近在面试中,除了基础 & 算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全 ...
- ID3决策树---Java
1)熵与信息增益: 2)以下是实现代码: //import java.awt.color.ICC_ColorSpace; import java.io.*; import java.util.Arra ...
- 决策树之ID3算法实现(python)
决策树的概念其实不难理解,下面一张图是某女生相亲时用到的决策树: 基本上可以理解为:一堆数据,附带若干属性,每一条记录最后都有一个分类(见或者不见),然后根据每种属性可以进行划分(比如年龄是>3 ...
- 从决策树学习谈到贝叶斯分类算法、EM、HMM
从决策树学习谈到贝叶斯分类算法.EM.HMM (Machine Learning & Recommend Search交流新群:172114338) 引言 log ...
- 决策树学习笔记(Decision Tree)
什么是决策树? 决策树是一种基本的分类与回归方法.其主要有点事模型具有可得性,分类速度快.学习时,利用训练数据,根据损失函数最小化原则建立决策树模型:预测时,对新数据,利用决策树模型进行分类. 决策树 ...
随机推荐
- 从SpringBoot构建十万博文聊聊Tomcat集群监控
前言 在十万博文终极架构中,我们使用了Tomcat集群,但这并不能保证系统不会出问题,为了保证系统的稳定运行,我们还需要对 Tomcat 进行有效的运维监控手段,不至于问题出现或者许久一段时间才知道. ...
- js-DOM ~ 05. Date日期的相关操作、string、查字符串的位置、给索引查字符、字符串截取slice/substr/substring、去除空格、替换、大小写、Math函数、事件绑定、this
内置对象: 语言自带的对象/提供了常用的.基本的功能 打印数组和字符串不用for... in / 打印josn的时候采用for...in Date 获取当前事件: var date = ...
- hive正则表达式的用法
regexp_replace用法 1. 截取字符串中的汉字部分: 举个栗子:select regexp_replace('七夕节comming!来啦','([^\\u4E00-\\u9FA5]+)' ...
- odoo12之应用:一、双因子验证(Two-factor authentication, 2FA)(HOTP,TOTP)附源码
前言 双因子认证:双因子认证(2FA)是指结合密码以及实物(信用卡.SMS手机.令牌或指纹等生物标志)两种条件对用户进行认证的方法.--百度百科 跟我一样"老"的网瘾少年想必一定见 ...
- CVE-2018-14418 擦出新火花
笔者<Qftm>原文发布:https://xz.aliyun.com/t/6223 0x00 前言 最近,一次授权的渗透测试项目意外的撞出了(CVE-2018-14418)新的火花,在这里 ...
- Day004_Linux基础_基础命令之tar打包解包
基础命令之 打包,和解包. tar zcvf 打包的参数 tar zcvf /tmp/etc.tar.gz /etc 将/etc/下的文件压缩成一个压缩包 z 通过gzip工具进行压缩 c 表示 ...
- Go语言标准库之context
在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理.请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务.用来处理一个请 ...
- springboot使用jdbcTemplate连接数据库
springboot使用jdbcTemplate连接数据库 1.pom.xml: <?xml version="1.0" encoding="UTF-8" ...
- kafka经典入门
问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic.发送消息.消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有 ...
- java反射机制,以及对反射机制的了解
反射是什么?反射有什么用?我相信大家在开始学的时候都会有疑惑,直到如今我学的还不够深入只能简单的说说反射的作用,理论的我也听得很迷糊,接下来我就以几个例子来 写写反射的用处: 494696003群,有 ...