1. 引言
1.1 组织结构
本文档的编写逻辑:
为什么–为什么要用互信息,互信息用在哪里;
是什么–互信息的定义是什么,如何理解;
怎么办–如何进行互信息的计算,具体的示例;
1.2 背景
不知道大家有没有看过《非诚勿扰》这个电视相亲节目?非诚勿扰节目中,如果男嘉宾经历了千辛万苦还没有被女嘉宾灭完灯,那么就会进入到“权利反转”环节,由男嘉宾选择女嘉宾。
假设现在场上有4位女嘉宾为我留灯,我该怎么选择呢?在舞台上,我只能选择了解这4位女嘉宾以下几个方面中的某一个,我应该选择哪一个方面才能有较大几率确保我翻牌的是命中注定的那个人呢?哪个方面对我来说才是我在求偶中最看重的呢?
假设事先节目组对我做了测试,给了我几位女嘉宾的数据以及我做出的牵手意向决定:
女嘉宾编号 \ 女嘉宾的基本条件 | 性格 | 身高 | 星座 | 收支情况(月薪) | 牵手意向 |
---|---|---|---|---|---|
女嘉宾0 | 魅力知性 | 172 | 天秤座 | 1w | 是 |
女嘉宾1 | 温柔体贴 | 165 | 水瓶座 | 8k | 是 |
女嘉宾2 | 水性扬花 | 164 | 摩羯座 | 2w | 否 |
女嘉宾3 | 魅力知性 | 175 | 白羊座 | 1.5w | 是 |
女嘉宾4 | 温柔体贴 | 159 | 水瓶座 | 8.5k | 否 |
女嘉宾5 | 水性杨花 | 167 | 摩羯座 | 9k | 否 |
这里先插播一下熵
和条件熵
的概念,以及信息增益
的概念:
- 熵:用来度量信息的不确定程度
- 条件熵:在一个条件下,随机变量的不确定性
- 信息增益:在一个条件下,信息不确定性减少的程度,即:信息增益 = 熵 – 条件熵
1.熵
那么,在这6个女嘉宾的数据中,随机变量 X = 牵手意向 X=\text{ 牵手意向} X= 牵手意向 中结果为是
的数量为3,结果为否
的数量为3,那么,根据熵的公式:
H ( X ) = − ∑ i = 1 n p ( x i ) log p ( x i ) H(X)=-\sum_{i=1}^{n} p(x_i) \log{p(x_i)} H(X)=−i=1∑np(xi)logp(xi)
可以得到:
p ( X = 是 ) = 1 2 , p ( X = 否 ) = 1 2 p(X=\text{是})=\frac{1}{2}, \quad p(X=\text{否})=\frac{1}{2} p(X=是)=21,p(X=否)=21
H ( X ) = − ( 1 2 log 1 2 + 1 2 log 1 2 ) = 0.3010 H(X)= -(\frac{1}{2}\log{\frac{1}{2}} + \frac{1}{2}\log{\frac{1}{2})} = 0.3010 H(X)=−(21log21+21log21)=0.3010
现在我想评估一下女嘉宾的性格
这个特征,对我是否会和她牵手
的重要性如何,我该怎么做呢?这时候就要用到条件熵,计算出当我知道了一个女嘉宾的性格的时候,牵手与否的不确定性。最后,用我一开始的不确定性减去我在知道了女嘉宾性格以后的不确定性,得到的就是信息增益。
2.条件熵
在表女嘉宾数据一览表
中,可以看到,女嘉宾的性格有{魅力知性、温柔体贴、水性杨花}三种:
魅力知性
的包括女嘉宾 {0, 3},牵手意向
为是
的个数为2个,为否
的个数为0个;
温柔体贴
的包括女嘉宾 {1, 4},牵手意向
为是
的个数为1个,为否
的个数为1个;
水性杨花
的包括女嘉宾 {2, 5},牵手意向
为是
的个数为0个,为否
的个数为2个;
那么,根据条件熵的公式:
H ( Y ∣ X ) = ∑ x ∈ X p ( x ) H ( Y ∣ X = x ) H(Y|X)=\sum_{x \in X}p(x)H(Y|X=x) H(Y∣X)=x∈X∑p(x)H(Y∣X=x)
先计算公式中的 H ( Y ∣ X = x ) H(Y|X=x) H(Y∣X=x):
H ( Y ∣ X = 魅力知性 ) = − ( 1 log 1 + 0 log 0 ) = 0 H(Y|X=\text{魅力知性})=-(1\log{1}+0\log{0})=0 H(Y∣X=魅力知性)=−(1log1+0log0)=0
注: 0 log 0 = 0 0\log{0}=0 0log0=0, 洛必达法则证明}
H ( Y ∣ X = 温柔体贴 ) = − ( 1 2 log 1 2 + 1 2 log 1 2 ) = 0.3010 H(Y|X=\text{温柔体贴})=-(\frac{1}{2}\log{\frac{1}{2}} + \frac{1}{2}\log{\frac{1}{2}})=0.3010 H(Y∣X=温柔体贴)=−(21log21+21log21)=0.3010
H ( Y ∣ X = 水性杨花 ) = − ( 0 log 0 + 1 log 1 ) = 0 H(Y|X=\text{水性杨花})=-(0\log{0}+1\log{1})=0 H(Y∣X=水性杨花)=−(0log0+1log1)=0
又有,不同类型性格所占的比例:
p ( X = 魅力知性 ) = 1 3 p(X=\text{魅力知性})=\frac{1}{3} p(X=魅力知性)=31
p ( X = 温柔体贴 ) = 1 3 p(X=\text{温柔体贴})=\frac{1}{3} p(X=温柔体贴)=31
p ( X = 水性杨花 ) = 1 3 p(X=\text{水性杨花})=\frac{1}{3} p(X=水性杨花)=31
那么,条件熵为:
H ( Y ∣ X ) = 1 3 × 0 + 1 3 × 0.3010 + 1 3 × 0 = 0.1003 H(Y|X) = \frac{1}{3} \times 0 + \frac{1}{3} \times 0.3010 + \frac{1}{3} \times 0 = 0.1003 H(Y∣X)=31×0+31×0.3010+31×0=0.1003
3.信息增益
信息熵与条件熵相减,就是信息增益:
0.3010 − 0.1003 = 0.2007 0.3010-0.1003=0.2007 0.3010−0.1003=0.2007
也就是说,当我知道了女嘉宾的性格之后,我心里没谱的程度已经下降了很多(0.2007)了。假设我其他特征也算了,发现在这些特征的计算结果中,性格的信息增益最大,那么就说明性格对我挑选配偶的影响最大。因此我在“权利反转”环节就能跟孟爷爷说:我要看女嘉宾的性格条件再做决定。
说了这么多,也没说互信息呀?其实信息增益
和互信息
是同一个值,二者的计算公式一样(二者的区别,二者的联系)。在决策树中,通常使用信息增益来进行特征的选择。
2. 概念
2.1 定义
两个随机变量的互信息(Mutual Information,简称MI)用来衡量变量间相互依赖性。
-
两个
离散
随机变量 X X X 和 Y Y Y 的互信息可以定义为:
I ( X ; Y ) = ∑ y ∈ Y ∑ x ∈ X p ( x , y ) log ( p ( x , y ) p ( x ) p ( y ) ) I(X;Y)=\sum_{y \in Y} \sum_{x \in X} p(x,y)\log( \frac{p(x,y)}{p(x)p(y)}) I(X;Y)=y∈Y∑x∈X∑p(x,y)log(p(x)p(y)p(x,y)) -
两个
连续
随机变量 X X X 和 Y Y Y 的互信息可以定义为:
I ( X ; Y ) = ∫ Y ∫ X p ( x , y ) log ( p ( x , y ) p ( x ) p ( y ) ) I(X;Y)=\int_{Y} \int_{X} p(x,y)\log( \frac{p(x,y)}{p(x)p(y)}) I(X;Y)=∫Y∫Xp(x,y)log(p(x)p(y)p(x,y))
其中 p ( x , y ) p(x,y) p(x,y) 是 X X X 和 Y Y Y 的联合概率分布函数,而 p ( x ) p(x) p(x) 和 p ( y ) p(y) p(y) 分别是 X X X 和 Y Y Y 的边缘概率分布函数。
2.2 理解
原来,对随机变量 X X X 有些不确定(不确定性为 H ( X ) H(X) H(X) ),当知道了 Y Y Y 后,对 X X X 不确定性变为 H ( X ∣ Y ) H(X|Y) H(X∣Y) ,这个不确定性的减少量就是 X X X , Y Y Y 之间的互信息 I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) I(X;Y)=H(X)-H(X|Y) I(X;Y)=H(X)−H(X∣Y) ,这个公式与上述互信息的公式是等价的。
注: H ( X ) H(X) H(X) 是随机变量X的熵,而 H ( X ∣ Y ) H(X|Y) H(X∣Y) 是条件熵
即:互信息 = 熵 – 条件熵 。
3. 示例
# 定义数据
data = pd.DataFrame(
{
"性格":["魅力知性", "温柔体贴", "水性杨花", "魅力知性", "温柔体贴",
"水性杨花"],
"身高":[172, 165, 164, 175, 159, 167],
"星座":["天秤座", "水瓶座", "摩羯座", "白羊座", "水平座", "摩羯座"],
"收支情况(月薪)":[10000, 8000, 20000, 15000, 8500, 9000],
"牵手意向":["是", "是", "否", "是", "否", "否"]
}
)
def ent(data):
""" 计算熵的函数 Args: data: 数据 Returns: entropy: 返回数据的熵 """
prob = pd.value_counts(data) / len(data) # 计算该属性中不同种类的比例
entropy = sum(np.log10(prob) * prob * (-1)) # 求得该属性的熵
return entropy
def info_gain(data, fea1, fea2):
""" 计算信息增益的函数 Args: data: 数据 fea1: 属性1 fea2: 属性2(目标属性) Returns: result: 信息增益的值 """
e1 = data.groupby(fea1).apply(lambda x:ent(x[fea2])) # 计算H(Y|X=x)
p1 = pd.value_counts(data[fea1]) / len(data[fea1]) # 计算特征fea1中不同类别的比例
e2 = sum(e1 * p1) # 求出在知道fea1的条件下fea2的条件熵
result = ent(data[fea2]) - e2 # 求出信息增益
return result
info_gain(data, "性格", "牵手意向")
输出:
Out[3]:0.20068666377598748
4. 缺点
-
通过互信息进行特征选择,可以最大化特征与分类变量之间的相关度,就是选择与分类变量拥有最高相关度的前k个变量。但是,在特征选择中,单个好的特征的组合并不能增加分类器的性能,因为有可能特征之间是高度相关的,这就导致了特征变量的冗余。
-
容易受边缘概率的影响,倾向于选择稀有特征
5. 总结
通俗而言,利用信息增益可以衡量在引入一个变量之后,原有变量不确定性减少的程度。信息增益越高,表示新引入的变量效果越好。信息增益可以帮助我们了解各个因子是否有效,也可以用来衡量机器学习中的各个特征的重要性。
PS: 背景中的例子中性格的词语仅是举例用。 另:2.1互信息的公式可以推导成 I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) I(X;Y)=H(X)-H(X|Y) I(X;Y)=H(X)−H(X∣Y)的形式,可以从Wikipedia中找到推导过程。关于互信息和信息增益的关系网上有的说就是一个东西,有的说是有区别的。但是二者的值是一样的。
今天的文章互信息介绍分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/12330.html