easy-algorithm-interview-an.../feature-engineering/信息熵 条件熵 信息增益 信息增益比 GiNi系数.md

7.1 KiB
Raw Permalink Blame History

在信息论与概率统计学中entropy是一个很重要的概念。在机器学习与特征工程中熵的概念也用得灰常多。今天就把跟熵有关的东东稍微整理一下权当笔记。

1.信息熵

熵是神马东东信息论的开山祖师爷Shannon中文翻译过来一般叫香农总觉得很多文字经过翻译就不对劲就跟人家老外翻译贱人就是矫情一样感觉怪怪的。所以咱们还是用英文了偷偷装个小逼明确告诉我们信息的不确定性可以用熵来表示
对于一个取有限个值的随机变量X如果其概率分布为
P(X=x_i) = p_i, i = 1,2, \cdots,n
那么随机变量X的熵可以用以下公式描述
H(X)=-\sum_{i=1}^n p_i \log p_i

每次看到这个式子都会从心底里感叹数学的伟大与奇妙。在这之前信息这东东对于人们来说是个看着好像挺清晰实际还是很模糊的概念。Shannon用最简洁美妙的方式告诉了整个世界信息到底应该怎么去衡量去计算。今天每个互联网人都知道这个衡量的标准就是bit。正是由于bit的出现才引领了我们今天信息时代的到来。所以即使把Shannon跟世界上最伟大的那些科学家相提并论我觉得也丝毫不为过。

举个例子,如果一个分类系统中,类别的标识是c,取值情况是c_1,c_2,\cdots,c_nn为类别的总数。那么此分类系统的熵为
H(c)=-\sum_{i=1}^n p(c_i) \cdot \log_2 p(c_i)
更特别一点,如果是个二分类系统,那么此系统的熵为:
H(c) = p(c_0) \log _2p(c_0) + p(c_1) \log_2 p(c_1)
其中p(c_0)p(c_1)分别为正负样本出现的概率。

2.条件熵(Conditional Entropy)与信息增益Information Gain

第一节我们谈到信息的不确定性我们用熵来进行描述。很多时候我们渴望不确定性渴望明天又是新的一天希望寻找新的刺激与冒险所谓的七年之庠就是最好的例子。但是又有很多时候我们也讨厌不确定性比如现在的RTB广告很多时候广告主其实希望不管什么情况下这个广告位都是归我所有来投广告别人都别跟我来抢我把广告素材准备好以后媒体按排期给我播就行了。所以在这种情况下我们又要竭力去消除系统的不确定性。

那怎么样去消除系统的不确定性呢?当我们知道的信息越多的时候,自然随机事件的不确定性就越小。举个简单的例子:
如果投掷一枚均匀的筛子那么筛子出现1-6的概率是相等的此时整个系统的熵可以表述为H(c) = - \frac{1}{6} \log_2 \frac{1}{6} \times 6 = \log_2 6
如果我们加一个特征告诉你掷筛子的结果出来是偶数因为掷筛子出来为偶数的结果只可能为2,4,6那么此时系统的熵为:
H(c) = - \frac{1}{3} \log_2 \frac{1}{3} \times 3 = \log_2 3

因为我们加了一个特征x结果为偶数所以整个系统的熵减小不确定性降低。

来看下条件熵的表达式:
1.当特征x被固定为值x_i时,条件熵为: H(c|x=x_i)
2.当特征X的整体分布情况被固定时,条件熵为:H(c|X)
应该不难看出: \begin{aligned} H(c|X) &= -p(x=x_1)H(c|x=x_1) - p(x=x_2)H(c|x=x_2) - \cdots - p(x=x_n)H(c|x=x_n) \\\\ & = -\sum_{i=1}^{n} p(x=x_i)H(c|x = x_i) \\\\ & = -\sum_{i=1}^{n} p(x=x_i) p(c|x = x_i) \log_2 p(c|x = x_i) \\\\ & = -\sum_{i=1}^{n} p(c,x_i) \log_2p(c|x = x_i) \end{aligned}

其中n为特征X所出现所有种类的数量。

那么因为特征X被固定以后给系统带来的增益(或者说为系统减小的不确定度)为: \begin{aligned} IG(X) & = H(c) - H(c|X) \\\\ & = -\sum_{i=1}^n p(c_i) \log_2 p(c_i)+\sum_{i=1}^{n} p(x=x_i)H(c|x = x_i) \end{aligned}

举个别人文章中例子文本分类系统中的特征X,那么X有几个可能的值呢注意X是一个固定的特征比如关键词“经济”当我们说特征“经济”可能的取值时实际上只有两个要么出现要么不出现。假设x代表x出现,而\bar x表示x不出现。注意系统包含xx不出现与系统根本不包含x可是两回事。
因此固定X时系统的条件熵为: \begin{aligned} H(C|X) &= -p(x)H(c|x) - p(\bar x) H(C| \bar x) \\\\ \end{aligned}

特征X给系统带来的信息增益(IG)为: \begin{aligned} IG(X) &= H(c) - H(c|X) \\\\ & =-\sum_{i=1}^n p(c_i) \log_2 p(c_i) + p(x) \sum_{i=1}^n p(c_i|x) \log_2 p(c_i|x) + p(\bar x)\sum_{i=1}^n p(c_i| \bar x) \log_2 p(c_i| \bar x) \end{aligned}

式子看上去很长其实计算起来很简单都是一些count的操作。-\sum_{i=1}^n p(c_i) \log_2 p(c_i)这一项不用多说,就是统计各个类别的概率,将每个类别的样本数量除以总样本量即可。$ p(x) _{i=1}^n p(c_i|x) _2 p(c_i|x)这一项,p(x)表示特征在样本中出现的概率,将特征出现的次数除以样本总量即可。p(c_i|x)表示特征出现的情况下每个类别的概率分别为多少也全是count操作。p(c_i| x)$操作以此类推。

3.信息增益做特征选择的优缺点

先来说说优点:
1.信息增益考虑了特征出现与不出现的两种情况,比较全面,一般而言效果不错。
2.使用了所有样例的统计属性,减小了对噪声的敏感度。
3.容易理解,计算简单。

主要的缺陷:
1.信息增益考察的是特征对整个系统的贡献,没有到具体的类别上,所以一般只能用来做全局的特征选择,而没法针对单个类别做特征选择。
2.只能处理离散型的属性值,没法处理连续值的特征。
3.算法天生偏向选择分支多的属性容易导致overfitting。

4.信息增益比(Infomation Gain Ratio)

前面提到信息增益的一个大问题就是偏向选择分支多的属性导致overfitting那么我们能想到的解决办法自然就是对分支过多的情况进行惩罚(penalty)了。于是我们有了信息增益比,或者说信息增益率:
特征X的熵:
H(X)=-\sum_{i=1}^n p_i \log p_i
特征X的信息增益
IG(X) = H(c) - H(c|X)
那么信息增益比为:
g_r = \frac {H(c) - H(c|X)}{H(X)}

在决策树算法中ID3使用信息增益c4.5使用信息增益比。

5.Gini系数

Gini系数是一种与信息熵类似的做特征选择的方式可以用来数据的不纯度。在CART(Classification and Regression Tree)算法中利用基尼指数构造二叉决策树。
Gini系数的计算方式如下
Gini(D) = 1 - \sum_{i=1}^{n} p_i^2
其中D表示数据集全体样本p_i表示每种类别出现的概率。取个极端情况,如果数据集中所有的样本都为同一类,那么有p_0 = 1Gini(D) = 0,显然此时数据的不纯度最低。
与信息增益类似,我们可以计算如下表达式:
\Delta Gini(X) = Gini(D) - Gini_X(D)
上面式子表述的意思就是,加入特征X以后,数据不纯度减小的程度。很明显,在做特征选择的时候,我们可以取\Delta Gini(X)最大的那个