详解熵, 交叉熵,KL散度,互信息
首先介绍几个信息论中的概念。
熵, 表示某个概率分布的不确定度:
H(x) = - \sum p(x) log p(x)
联合熵,两个变量联合分布的不确定度:
H(x,y) = \sum \sum p(x,y) log p(x,y)
条件熵,在X确定后,Y的不确定度:
H(Y|X) = \sum p(x_i) H(Y|X=x_i) = \sum \sum p(x,y) log (p(x,y)/p(x))
相对熵,也称KL散度,衡量两个概率分布的距离。用非真实分布 q(x) 得到的平均码长比真实分布 p(x) 得到的平均码长多出的比特数就是相对熵。
DL(p||q) = H(p,q) - H(p) = \sum p(x) log p(x) / q(x)
当 H§ 为常量时(注:在机器学习中,训练数据分布是固定的),最小化相对熵 DKL(p||q) 等价于最小化交叉熵 H(p,q) 也等价于最大化似然估计。
在机器学习中,我们希望在训练数据上模型学到的分布 P(model) 和真实数据的分布 P(real) 越接近越好,所以我们可以使其相对熵最小。但是我们没有真实数据的分布,所以只能希望模型学到的分布 P(model) 和训练数据的分布 P(train) 尽量相同。假设训练数据是从总体中独立同分布采样的,那么我们可以通过最小化训练数据的经验误差来降低模型的泛化误差。
互信息 (mutual information) 用于特征选择,可以从两个角度进行解释:(1)、基于 KL 散度和 (2)、基于信息增益。对于离散型随机变量 X,Y,互信息的计算公式如下:
I(X;Y) = \sum\limits_{y \in \mathcal{Y}}\sum\limits_{x \in \mathcal{X}} p(x,y) \,\text{log}\left(\frac{p(x,y)}{p(x)p(y)}\right)
对于连续型变量:
I(X;Y) = \int_{\mathcal{Y}}\int_{\mathcal{X}} p(x,y) \,\text{log}\left(\frac{p(x,y)}{p(x)p(y)}\right) dxdy
可以看到连续型变量互信息的需要计算积分比较麻烦,通常先要进行离散化,所以这里主要讨论离散型变量的情况。互信息可以方便地转换为 KL 散度的形式:
I(X;Y) = \sum\limits_{y \in \mathcal{Y}}\sum\limits_{x \in \mathcal{X}} p(x,y) \,\text{log}\left(\frac{p(x,y)}{p(x)p(y)}\right) = D_{KL}(p(x,y) || p(x)p(y))
KL 散度可以用来衡量两个概率分布之间的差异,而如果 x 和 y 是相互独立的随机变量,则 p(x,y)=p(x)p(y) ,那么互信息为 0。因此若 I(X;Y) 越大,则表示两个变量相关性越大,于是就可以用互信息来筛选特征。
总结一下,X,Y之间的互信息,为p(x,y)与p(x)p(y)间的KL散度。
而从信息增益的角度来看,互信息表示由于 X 的引入而使 Y 的不确定性减少的量。信息增益越大,意味着特征 X 包含的有助于将 Y 分类的信息越多 (即 Y 的不确定性越小)。决策树就是一个典型的应用例子,其学习的主要过程就是利用信息增益来选择最优划分特征,表示由于特征 A 而使得对数据集 D 的分类不确定性减少的程度,信息增益大的特征具有更强的分类能力。其计算公式为
I(D\,;A) = H(D) - H(D|A) = H(D) - \sum \limits_{v=1}^\mathcal{V}\frac{|D^v|}{|D|}{H(D^v)}
类似的,I(X;Y) 可以表示为
I(X;Y) = H(Y) - H(Y|X)
(Y) 为熵,表示随机变量 Y 的不确定性。H(Y|X)=∑_xp(x)H(Y|X=x) 为条件熵 (conditional entropy),表示在随机变量 X 已知的情况下随机变量 Y 的不确定性。那么二者的差 就表示由于 X 的引入而使 Y 的不确定性减少的量
放在特征选择的语境下,我们希望 Y 的不确定越小越好,这样越有助于分类,那么互信息越大,则特征 X 使得 Y 的不确定性减少地也越多,即 X 中包含的关于 Y 的信息越多。在特征过滤时,计算每个特征与类别的互信息值,排序后去除互信息小的特征。
互信息的一大优点是其能检测出多种变量之间的关系,而相较而言 F 检验只能表示线性相关关系。Scikit-learn 的这个例子 (Comparison of F-test and mutual information) 中显示了这一点,互信息能很好展现 x 和 y 之间的非线性关系:

由上图,F_test对线性相关比较敏感,但对cos相关就表现不太好了,但MI依旧很好,证明可以捕获非线性相关。
