[PYTHON] Diagramme PRML Figure 1.15 Biais dans l'estimation la plus probable de la distribution gaussienne

Chose que tu veux faire

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.

Estimation de la moyenne et de la variance

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. test.jpg

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} $.

Comparaison avec la vraie valeur

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.

Mise en œuvre 1

#!/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')

Résultat d'exécution 1

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. test.png

Mise en œuvre 2

#!/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')

Résultat d'exécution 2

On peut voir que la distribution estimée (en rouge) a tendance à avoir une variance plus petite que la vraie distribution (en vert). test.png

Recommended Posts

Diagramme PRML Figure 1.15 Biais dans l'estimation la plus probable de la distribution gaussienne
Implémentation d'estimation la plus probable du modèle de sujet en python
EM de distribution gaussienne mixte
PRML Chapter 13 Estimation la plus probable Implémentation Python du modèle de Markov caché
PRML §3.3.1 Reproduire le diagramme de convergence de la distribution des paramètres par régression linéaire bayésienne
Exemple de code python pour la distribution exponentielle et l'estimation la plus probable (MLE)