Matplotlib 画图----信息熵函数图像
最近在看GAN和VAE的过程中,发现信息熵的概念多次出现,就⼜复习了⼀下。为了更形象的了解信息熵,在⽹上信息熵函数图像的过
程中,发现只有⼆元的信息熵图像,出于好奇,画了就画了⼀下三元的。
代码:
E =−p ∗1log p −21(1−p )∗1log (1−2p )
1E =−p ∗1log p −21p ∗2log p −22(1−p −1p )∗2log (1−2p −1p )linspace numpy
2
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# ⼆类信息熵
def binary_entropy(p, epslion=1e-10):
'''params:
p: A numpy array
epslion: 防⽌数值溢出
'''
return -(p * np.log2(p + epslion) + (1 - p) * np.log2(1 - p + epslion))
# 三类信息熵
def compute_entropy(p1, p2, p3, epslion=1e-10):
'''params:
p1, p2, p3: A numpy array
epslion: 防⽌数值溢出
'''
return -(p1 * np.log2(p1 + epslion) + p2 * np.log2(p2 + epslion) + p3 * np.log2(p3 + epslion)) # ⼆类信息熵图像
p1 = np.linspace(0, 1, 50)
entropy = binary_entropy(p1)
plt.figure()
plt.plot(p1, entropy, 'k-')
plt.xlabel('$p_1$')
plt.ylabel('E')
plt.savefig('./⼆类熵函数图像.jpg')
plt.show()
# 三类信息熵图像
p1 = np.linspace(0, 1, 50)
p2 = np.linspace(0, 1, 50)
x, y = np.meshgrid(p1,p2) # ⽣成⽹格
z = 1 - x - y # p3 = 1- p1 - p2
z[z <= 0] = 0. # p1 + p2 >= 1 则p3 = 0
E = compute_entropy(x, y, z, 1e-10)
E[(x + y) > 1] = None # p1 + p2 > 1 熵值不存在
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(x, y, E, rstride=1, cstride=1)
ax.set_xlabel('$p_1$')
ax.set_ylabel('$p_2$')
ax.set_zlabel('E')
plt.savefig('./三类熵函数图像.jpg')
plt.show()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论