python实现信息熵和条件熵

  • Post author:
  • Post category:python




信息熵

信息熵,可以用来衡量一个信息的复杂程度,通俗的理解就是表示了这件事的不确定性,如果其不确定性越大,则信息熵的值也就越大,反之,则越小。

对于随机事件X,用



p

x

p_{x}







p











x






















表示事件x发生的概率,则随机事件X的信息熵可以表示为:




H

(

X

)

=

i

=

0

n

p

x

l

o

g

p

x

{\Large H(X) = – \sum_{i=0}^{n}p_{x} logp_{x}}







H


(


X


)




=






















i


=


0










n






















p











x



















l


o


g



p











x
























用python实现信息熵:

#计算信息熵,data为series对象
def getEntropy(data):
    if not isinstance(data,pd.core.series.Series):
        s = pd.Series(data)
    prt_ary = data.groupby(data).count().values / float(len(data))
    return sum(-(np.log2(prt_ary)*prt_ary))



条件熵

条件熵,表示在已知随机变量X的情况下,随机变量Y的不确定性。公式定义如下:




H

(

Y

X

)

=

x

p

x

H

(

Y

X

=

x

)

{\Large H(Y|X)=\sum_{x}^{} p_{x} H(Y|X=x)}







H


(


Y





X


)




=

















x






























p











x



















H


(


Y





X




=




x


)







python 实现条件熵的代码如下:

def getCondEntropy(data,xname,yname):
    xs = data[xname].unique()
    ys = data[yname].unique()
    p_x = data[xname].value_counts() / data.shape[0]
    ce = 0
    
    for x in xs:
        ce += p_x[x]*getEntropy(data[data[xname] == x][yname])
        print(str(x) + ":" + str(p_x[x]*getEntropy(data[data[xname] == x][yname])))
        
    return ce



版权声明:本文为scp_6453原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。