Considérons une distribution gaussienne avec une moyenne $ \ mu $ et une variance $ \ sigma ^ 2 $, comme indiqué ci-dessous.
\mathcal{N}(x\,\lvert\,\mu,\sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{1}{2\sigma^2}(x-\mu)^2\right)
Supposons que vous observiez N données, $ x_1, x_2 \ cdots x_N $. En supposant que chaque donnée est générée indépendamment selon la distribution gaussienne ci-dessus, les valeurs de la moyenne $ \ mu $ et de la variance $ \ sigma ^ 2 $ de la distribution gaussienne sont estimées à partir des données.
Puis évaluez comment l'estimation se compare à la valeur réelle.
La valeur attendue est représentée par $ {\ mathbb E} [\ cdot] $. En d'autres termes
\mathbb{E}[x] = \mu\\
\mathbb{E}[x^2] = \mu^2 + \sigma^2\\
\mathbb{E}[(x-\mu)^2] = \sigma^2
Résumez également les données d'observation
{\bf x} = (x_1,x_2\cdots x_N)^T
Il est exprimé comme.
Lorsque N données sont générées à partir de la distribution gaussienne, la probabilité qu'elles correspondent aux données observées $ {\ bf x} $ est le produit de la probabilité que chaque donnée $ x_1 \ sim x_n $ soit générée.
p({\bf x}\,\lvert\,\mu,\sigma^2) = \prod_{n=1}^N\mathcal{N}(x_n\,\lvert\,\mu,\sigma^2)
Ce sera. C'est ce qu'on appelle la «probabilité». Je voudrais trouver $ \ mu, \ sigma ^ 2 $ qui maximise cette probabilité "probabilité", mais c'est difficile à calculer car il contient $ \ exp $ et $ \ prod $.
Par conséquent, prenez le logarithme des deux côtés pour faciliter le calcul comme suit.
\ln p({\bf x}\,\lvert\,\mu,\sigma^2) = \sum_{n=1}^N(x_n -\mu)^2 - \frac{N}{2}\ln{\sigma^2} - \frac{N}{2}\ln{2\pi}
$ y = \ ln (x) $ est une fonction qui augmente y lorsque $ x $ augmente, comme indiqué ci-dessous.
Donc, maximisez $ p ({\ bf x} , \ lvert , \ mu, \ sigma ^ 2) $ et $ \ ln p ({\ bf x} , \ lvert , \ mu, \ maximiser sigma ^ 2) $ a la même signification.
En différenciant $ \ mu, \ sigma ^ 2 $ et en le mettant à 0, cela devient comme suit.
\mu_{ML} = \frac{1}{N}\sum_{n}x_n\\
\sigma^2_{ML} = \frac{1}{N}\sum_{n}(x_n - \mu_{ML})^2
De plus, afin de distinguer la valeur obtenue de la valeur vraie, elle est définie comme $ \ mu_ {ML}, \ sigma ^ 2_ {ML} $.
Soit les vraies valeurs de moyenne et de variance $ \ mu, \ sigma ^ 2 $.
Lors de l'estimation de $$ \ mu_ {ML}, \ sigma ^ 2_ {ML} $ à l'aide de diverses données $ {\ bf x}, $$ mu_ {ML}, \ sigma ^ 2_ {ML} Voyons quelle valeur $ est susceptible de prendre. Plus précisément, considérez les valeurs attendues de $ \ mu_ {ML}, \ sigma ^ 2_ {ML} $.
Quant à la moyenne
\begin{align}
\mathbb{E}[\mu_{ML}] &= \frac{1}{N}\sum_{n}\mathbb{E}[x_n]\\
&=\mu
\end{align}
Correspondra à la vraie moyenne. D'autre part, concernant la dispersion
\begin{align}
\mathbb{E}[\sigma^2_{ML}] &= \frac{1}{N}\sum_{n}\mathbb{E}[(x_n - \mu_{ML})^2]\\
&=\frac{1}{N}\sum_{n}\left(\mathbb{E}[x_n^2] - 2\mathbb{E}[x_n\mu_{ML}] + \mathbb{E}[\mu_{ML}^2]\right)
\end{align}
Notez que $ \ mu_ {ML} $ est une valeur calculée en fonction des points de données.
\begin{align}
\frac{1}{N}\sum_{n}\mathbb{E}[x_n\mu_{ML}] &= \frac{1}{N}\sum_{n}\mathbb{E}[x_n\frac{1}{N}\sum_{m}x_m]\\
&=\frac{1}{N^2}\sum_{n}\sum_{m}\mathbb{E}[x_nx_m]\\
&=\frac{1}{N}\left(\sigma^2 + N\mu^2\right)
\end{align}
\begin{align}
\frac{1}{N}\sum_{n}\mathbb{E}[\mu_{ML}^2] &= \frac{1}{N}\sum_{n}\mathbb{E}[\frac{1}{N}\sum_{l}x_l\frac{1}{N}\sum_{m}x_m]\\
&=\frac{1}{N^3}\sum_{n}\sum_{l}\sum_{m}\mathbb{E}[x_lx_m]\\
&=\frac{1}{N}\left(\sigma^2 + N\mu^2\right)
\end{align}
Parce que ça devient
\mathbb{E}[\sigma^2_{ML}] = \frac{N-1}{N}\sigma^2
Il s'avère que la variance estimée est probablement inférieure à la valeur réelle. Ce phénomène est appelé biais.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
#Tracer les données
X=np.arange(1,5,0.001)
def gaussian(x,mu,sig2):
y=np.exp(((x-mu)**2)/(-2*sig2))/np.sqrt(2*np.pi*sig2)
return y
#Vraie moyenne / dispersion
mu=3
sig2=1.0
#Nombre de données utilisées pour une estimation la plus probable
N=2
#Nombre de fois pour estimer le plus probable
M=10000
#Générer des données d'ensemble M à partir d'une distribution réelle avec N comme un ensemble
x=np.sqrt(sig2)*np.random.randn(N,M)+mu
#Estimation du maximum de vraisemblance à l'aide de N données pour M ensembles
mu_ml=(1/N)*x.sum(0)
sig2_ml=(1/N)*((x-mu_ml)**2).sum(0)
#Vraie distribution
plt.plot(X,gaussian(X,mu,sig2),'r',lw=15,alpha=0.5)
#Distribution qui fait la moyenne des résultats de M estimations les plus probables
plt.plot(X,gaussian(X,mu_ml.sum(0)/M,sig2_ml.sum(0)/M),'g')
#N pour la variance de l'estimation la plus probable/N-1x pour supprimer les biais
plt.plot(X,gaussian(X,mu_ml.sum(0)/M,sig2_ml.sum(0)/M * N/(N-1)),'b')
Vous pouvez voir que la variance de l'estimation la plus probable (ligne verte) multipliée par $ \ frac {N} {N-1} $ (ligne bleue) et la distribution vraie (ligne rouge épaisse) correspondent.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
#Tracer les données
plotS = 1000
X = np.linspace(-1,1,plotS)
#Fonction de densité de probabilité de distribution gaussienne
def gaussDist(x,mu,sig2):
ret = np.exp(-(x-mu)**2/(2*sig2))/np.sqrt(2*np.pi*sig2)
return ret
#Vraie distribution
mu_r = 0
sig2_r = 0.05
Y_r = gaussDist(X,mu_r,sig2_r)
np.random.seed(10)
for i in range(3):
plt.subplot(3,1,i+1)
plt.ylim([0,7])
#Données d'entraînement
N = 2
x_t = np.random.randn(N) * np.sqrt(sig2_r) + mu_r
plt.plot(x_t,np.zeros(x_t.shape[0]),'bo')
#Distribution estimée la plus probable
mu_ML = x_t.sum()/N
sig2_ML = ((x_t - mu_ML)**2).sum()/N
Y_ml = gaussDist(X,mu_ML,sig2_ML)
plt.plot(X,Y_ml,'r')
#Vraie distribution
plt.plot(X,Y_r,'g')
On peut voir que la distribution estimée (en rouge) a tendance à avoir une variance plus petite que la vraie distribution (en vert).
Recommended Posts