首先信息、香农熵、条件熵、信息增益都是信息论里面的概念。
本文章的讲解和代码实现(除了条件熵和信息增益)都基于两个随机变量的样本空空间,样本空间X={x1, x2}的概率分布如下所示:
p(x1) = p1, 0< p1 <1
p(x2) = p2, 0< p2 <1
p1 + p2 = 1
1.信息
1.1信息函数
信息是用来消除随机不确定性的东西,信息的公式如下所示
I(x) = -log(p(x), 2) ,
其中p(x)就是随机变量x发生时的概率,x ∈ {x1,x2}
可知I(x1)就是随机变量x1的信息,I(x2)就是随机变量x2的信息。
1.2信息函数的python是实现
# -*- coding: utf-8 -*-
"""
@author: 蔚蓝的天空tom
Talk is cheap, show me the code
Aim:画出样本空间X={x1, x2}中随机变量变量x1的信息函数Info(x1)曲线图,因变量为p
Info(x1) = -log2(p)
已知p(x1)=p, p(x2)=1-p, 0<= p <= 1
"""
import numpy as np
import math
import matplotlib.pyplot as plt
def log_ele(x, n):
'''
表达式x的logn函数 log(x, n)
:param x:表达式
:param n:log的底
'''
if 0 >= x:
return 0
else:
return math.log(x, n)
def log_func(X, n):
'''
logn函数的向量化
:param X:向量X
:param n:log的底
'''
func = np.frompyfunc(log_ele, 2, 1)
return func(X, n)
#画以概率p为因变量的随机变量的信息曲线
def plot_information():
'''
样本空间:X={x1, x2}
概率密度:p(x1) = p, p(x2) = 1 - p, 0.0<= p <=1.0
'''
p = np.arange(0.0, 1.01, 0.01)
'''
[ 0. 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11
0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23
0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35
0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47
0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59
0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71
0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83
0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95
0.96 0.97 0.98 0.99 1. ]
'''
info_x1 = -1 * log_func(p, 2) #x1的信息
#plot x1's information and x2's information in the coordinate system
x = p
y = info_x1
plt.figure(1)
plt.grid(True)
plt.title('random variable x1\'s information')
plt.xlabel('p')
plt.ylabel('random variable x1\'s information')
plt.ylim(min(y.min(), y.min()), max(y.max(), y.max())+1)
plt.xlim(x.min() - 0.1, x.max() + 0.1)
plt.plot(x, y, c='red',label='Info(x1)=-log2(p)')
plt.legend(loc = 'upper right')
plt.show()
if __name__=='__main__':
plot_information()
1.3信息函数的曲线图(变量概率p为因变量)
从图上可以知道样本空间中的随机变量x1的信息是随着x1的发生概率p的增大而减小下。可知随机变量的概率越大,此信息变量的信息会越小,此随机变量的不确定性就越小。
2.香农熵(Shannon Entropy)
2.1香农熵公式
从概率论的角度看,香农熵是样本空间内所有随机变量的信息的期望,香农熵的公式如下所示:
H(X)=p(x1)I(x1) + p(x2)I(x2),
其中X是样本空间{x1, x2},p(x1)是x1发生时的概率,p(x2)是x2发生时的概率,I(x1)是x1的信息,I(x2)是x2的信息
2.2香农熵的意义
1)香农熵只依赖样本空间X的分布
2)香农熵和样本空间X内的所有的样本取值没有任何关系
3)香农熵用来度量随机变量的不确定性
4)熵越大,概率说明X的不确定性越大
5)熵越小,概率说明X的不确定性越小
6)熵,就是不确定性的度量!
应用:在机器学习分类中用到香农熵,熵越到说明这个类别的不确定性越大,反之越小。
下面以本章中的样本空间为例,画出香农熵以概率p为因变量的变化曲线,其中p(x1)=p, p(x2) = 1 - p,0<= p <= 1。
2.3香农熵的python实现
# -*- coding: utf-8 -*-
"""
@author: 蔚蓝的天空tom
Talk is cheap, show me the code
Aim:画出样本空间X={x1, x2}的香农熵函数图H(X) = -p*log2(p) - (1-p)*log2(1-p),因变量为p