互信息介绍

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=1np(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(YX)=xXp(x)H(YX=x)
先计算公式中的 H ( Y ∣ X = x ) H(Y|X=x) H(YX=x)

H ( Y ∣ X = 魅力知性 ) = − ( 1 log ⁡ 1 + 0 log ⁡ 0 ) = 0 H(Y|X=\text{魅力知性})=-(1\log{1}+0\log{0})=0 H(YX=魅力知性)=(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(YX=温柔体贴)=(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(YX=水性杨花)=(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(YX)=31×0+31×0.3010+31×0=0.1003

3.信息增益
信息熵与条件熵相减,就是信息增益:
0.3010 − 0.1003 = 0.2007 0.3010-0.1003=0.2007 0.30100.1003=0.2007

也就是说,当我知道了女嘉宾的性格之后,我心里没谱的程度已经下降了很多(0.2007)了。假设我其他特征也算了,发现在这些特征的计算结果中,性格的信息增益最大,那么就说明性格对我挑选配偶的影响最大。因此我在“权利反转”环节就能跟孟爷爷说:我要看女嘉宾的性格条件再做决定。

说了这么多,也没说互信息呀?其实信息增益互信息是同一个值,二者的计算公式一样(二者的区别二者的联系)。在决策树中,通常使用信息增益来进行特征的选择。

2. 概念

2.1 定义

两个随机变量的互信息(Mutual Information,简称MI)用来衡量变量间相互依赖性

  1. 两个离散随机变量 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)=yYxXp(x,y)log(p(x)p(y)p(x,y))

  2. 两个连续随机变量 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)=YXp(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(XY) ,这个不确定性的减少量就是 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(XY) ,这个公式与上述互信息的公式是等价的。

注: H ( X ) H(X) H(X) 是随机变量X的熵,而 H ( X ∣ Y ) H(X|Y) H(XY) 是条件熵

即:互信息 = 熵 – 条件熵 。

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. 缺点

  1. 通过互信息进行特征选择,可以最大化特征与分类变量之间的相关度,就是选择与分类变量拥有最高相关度的前k个变量。但是,在特征选择中,单个好的特征的组合并不能增加分类器的性能,因为有可能特征之间是高度相关的,这就导致了特征变量的冗余。

  2. 容易受边缘概率的影响,倾向于选择稀有特征

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(XY)的形式,可以从Wikipedia中找到推导过程。关于互信息和信息增益的关系网上有的说就是一个东西,有的说是有区别的。但是二者的值是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值