** Notes sur cet article ** C'est un graffiti amateur. Je pense qu'il y a de nombreuses erreurs, des termes inappropriés et aucune preuve. Merci de votre compréhension.
Je veux trouver la quantité moyenne d'informations de la distribution de probabilité d'origine à partir de l'échantillon généré par la distribution de probabilité continue.
La quantité moyenne d'informations dans une distribution de probabilité continue avec une fonction de densité de probabilité $ , , f , $ $ , h (X) , $ est exprimée par l'équation 1, mais le nombre d'échantillons $ , N , $ S'il est suffisamment grand, il peut être obtenu à partir de la quantité d'informations de chaque échantillon $ , , x_i , $ comme indiqué dans l'équation 2 (devrait).
\begin{align}
&h(X) = \int_{\chi}^{}f(x)\,log\,f(x)\,dx\qquad\qquad ・ ・ ・ Équation 1\\
&h(X) \approx \frac{1}{N}\sum_{i=1}^{N}\,-logP(\,X = x_i\,)\,\qquad ・ ・ ・ Équation 2
\end{align}
Afin d'obtenir $ , h (X) $ à partir de l'équation 2, il est nécessaire d'obtenir $ , P (, X = x_i ,) , $ pour chaque échantillon $ , , x_i , $. .. De là, je vais expliquer un peu comment trouver $ P (, X = x_i ,) , $ et $ , h (X) , $.
Tout d'abord, nous définissons certaines quantités. -Réglez la distance entre chaque échantillon comme $ , d (x_i, , x_j) , $ $ ^ * $. -Pour chaque échantillon $ , , x_i , $, le nombre total d'échantillons dont la distance à $ x_i , $ est inférieure ou égale à $ , , d , $ est $ , n_i Définissez , $ (y compris vous-même). ・ Définissez le volume de la zone où la distance d'un certain $ , , x , $ est inférieure à $ , r , $ comme $ , V (r) , $ .. Selon cette définition, $ , P (, X = x_i ,) , $ peut être approximativement obtenu à partir de l'équation 3 en déterminant le $ , r , $ approprié.
P(\,X=x_i\,)\, \approx \frac{n_i}{NV(r)}\qquad ・ ・ ・ Équation 3
L'équation 4 est obtenue en remplaçant l'équation 3 par l'équation 2.
\begin{align}
h(X,r) &\approx \frac{1}{N}\sum_{i=1}^{N}\,-log\frac{n_i}{NV(r)}\\
&= \,logV(r) + logN - \frac{1}{N}\sum_{i=1}^{N}\,log\,n_i\qquad ・ ・ ・ Équation 4
\end{align}
Afin d'établir l'approximation de l'équation 3, il est préférable que $ r , $ prenne une valeur aussi petite que possible. Cependant, tant que le nombre d'échantillons est fini, si $ r , $ est extrêmement petit, la loi des grands nombres ne peut être satisfaite et l'approximation de l'équation 3 tombe en panne. Par conséquent, il est nécessaire de réfléchir à la manière de déterminer correctement $ r , $ tout en regardant les données réelles. $ ^ * \ lim_ {d (x_i, , x_j) \ à 0} P (, X = x_i ,) = lim_ {d (x_i, , x_j) \ à 0} P (, X = x_j) Tout devrait bien se passer tant qu'il rencontre ,) , , $
Générez un échantillon à partir d'une distribution gaussienne bidimensionnelle appropriée et trouvez $ h (X) , $.
import numpy as np
from matplotlib import pyplot as plt
def calc_d(x):
N = len(x)
x_tiled = np.tile(x, (N, 1, 1))
d = np.linalg.norm(x_tiled - x_tiled.transpose((1, 0, 2)), axis=2)
return d
#Appliquez la formule pour l'aire du cercle car le nombre de dimensions est de 2.
def calc_v(r):
v = np.pi * np.power(r, 2)
return v
def calc_h(d, v, N, r):
n = np.sum(d <= r, axis=0)
h = np.log(v) + np.log(N) - np.sum(np.log(n)) / N
return h
#Générer des données à partir d'une distribution gaussienne bidimensionnelle appropriée
data = np.random.normal(0, 1, (1000, 2))
#h en changeant r(X)Calculer
r_list = [(i + 1) * 0.01 for i in range(10000)] #La plage de r a été décidée de manière appropriée
d = calc_d(data)
N = len(data)
h_list = [calc_h(d, calc_v(r), N, r) for r in r_list]
#Dessinez un graphique
#Tracez la valeur calculée avec une ligne bleue continue
plt.figure(0)
plt.plot(r_list, h_list, color='blue', linestyle='solid')
#Tracez la valeur calculée à partir de la variance de l'échantillon avec une ligne pointillée bleue
Z = np.cov(data[:, 0], data[:, 1])
h_s = 0.5 * np.log(np.linalg.det(2 * np.pi * np.e * Z))
plt.plot(r_list, [h_s for _ in range(len(r_list))], color='blue', linestyle='dotted')
#Tracez la valeur calculée à partir de la variance de la population avec une ligne pointillée orange
h_u = np.log(2 * np.pi * np.e)
plt.plot(r_list, [h_u for _ in range(len(r_list))], color='orange', linestyle='dotted')
plt.xlim([0, 3])
plt.ylim([0, 5])
plt.show()
Lorsqu'il est exécuté, un tel graphique est obtenu.
L'axe horizontal représente $ , r , $ et l'axe vertical représente $ , h (X, r) , $. Comme expliqué en théorie, plus $ r , $ est petit, plus $ , h (X, r) , $ sera proche de la valeur vraie, mais s'il est trop petit, il divergera à son tour vers l'infini négatif. J'irai. En regardant le graphique, il semble qu'il soit en quelque sorte bon de décider $ , r , $ pour que la pente soit la plus petite. En fait, si l'approximation de l'équation 3 est vraie, alors $ , \ frac {\ partial} {\ partial r} h (X, r) = 0 , $ est également valable, donc cette décision n'est pas si étrange. Je pense, mais il n'y a pas de preuve, donc l'excès de confiance est interdit.