Python計算KL散度

2021-08-28 18:05:19 字數 3601 閱讀 5331

python計算kl散度

import numpy as np

import scipy.stats

x = [np.random.randint(1,11) for i in range(10)]

print(x)

print(np.sum(x))

px = x/np.sum(x)#歸一化

print(px)

y = [np.random.randint(1, 11) for i in range(10)]

print(y)

print(np.sum(y))

py = y / np.sum(y)#歸一化

print(py)

## scipy計算函式可以處理非歸一化情況,因此這裡使用# scipy.stats.entropy(x, y)或scipy.stats.entropy(px, py)均可

kl = scipy.stats.entropy(x, y)

print(kl)

#自己程式設計實現

kl= 0.0

for i in range(10):

kl += px[i] * np.log(px[i]/py[i])

print(k)

#tensorflow的神經網路

import sys;

import tensorflow as tf

import numpy as np

x_data = np.random.rand(100).astype(np.float32)

y_data = x_data*0.1+0.3

print(x_data)

print(y_data)

weights = tf.variable(tf.random_uniform([1], -1.0, 1.0))

biases = tf.variable(tf.zeros([1]))

y = weights*x_data + biases

print(y)

loss = tf.reduce_mean(tf.square(y-y_data))

optimizer = tf.train.gradientdescentoptimizer(0.5)

train = optimizer.minimize(loss)

init = tf.global_variables_initializer()

sess = tf.session()

sess.run(init)

for step in range(201):

sess.run(train)

if step % 20 == 0:

print(step, sess.run(weights), sess.run(biases))

#python畫2d圖

#python畫3d圖
import matplotlib.pyplot as plt

import numpy as np

from mpl_toolkits.mplot3d import axes3d

np.random.seed(42)

# 取樣個數500

n_samples = 500

dim = 3

# 先生成一組3維正態分佈資料,資料方向完全隨機

samples = np.random.multivariate_normal(

np.zeros(dim),

np.eye(dim),

n_samples

)# 通過把每個樣本到原點距離和均勻分布吻合得到球體內均勻分布的樣本

for i in range(samples.shape[0]):

r = np.power(np.random.random(), 1.0/3.0)

samples[i] *= r / np.linalg.norm(samples[i])

upper_samples =

lower_samples =

for x, y, z in samples:

# 3x+2y-z=1作為判別平面

if z > 3*x + 2*y - 1:

else:

fig = plt.figure('3d scatter plot')

ax = fig.add_subplot(111, projection='3d')

uppers = np.array(upper_samples)

lowers = np.array(lower_samples)

# 用不同顏色不同形狀的圖示表示平面上下的樣本

# 判別平面上半部分為紅色圓點,下半部分為綠色三角

KL散度 JS散度

kl divergence kullback leibler divergence kl散度,kl距離,又叫相對熵 relative entropy 衡量兩個概率分布之間的不同程度,是描述兩個概率分布p和q差異的一種方法就是資訊理論學的相對熵 最簡單的情況 當kl divergence為0時,兩個分...

KL散度與JS散度

js散度 jensen shannon divergence 又稱kl距離,相對熵。kl散度是描述兩個概率分布p和q之間差異的一種方法。直觀地說,可以用來衡量給定任意分布偏離真實分布的程度,如果兩個分布完全匹配,那麼kl p q 0,否則它的取值應該是0 inf 之間。kl散度越小,真實分布與近視分...

KL散度及其python實現

kl散度又是乙個從資訊理論 熵的角度考量距離的乙個量。但是,這裡說他是距離有點不妥,因為距離需要滿足4個條件 1 d x,x 0 反身性 2 d x,y 0 非負性 3 d x,y d y,x 對稱性 4 d x,k d k,y d x,y 三角形法則 但是,很遺憾,我們的kl散度至滿足前面兩條,後...