[PYTHON] PRML-Diagramm Abbildung 1.15 Verzerrung bei der Schätzung der wahrscheinlichsten Wahrscheinlichkeit der Gaußschen Verteilung

Was du machen willst

Betrachten Sie eine Gaußsche Verteilung mit dem Mittelwert $ \ mu $ und der Varianz $ \ sigma ^ 2 $, wie unten gezeigt.

\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)

Angenommen, Sie beobachten N Daten, $ x_1, x_2 \ cdots x_N $. Unter der Annahme, dass alle Daten unabhängig gemäß der obigen Gaußschen Verteilung erzeugt werden, werden die Werte des Durchschnitts $ \ mu $ und der Varianz $ \ sigma ^ 2 $ der Gaußschen Verteilung aus den Daten geschätzt.

Bewerten Sie dann, wie die Schätzung mit dem wahren Wert verglichen wird.

Schätzung von Mittelwert und Varianz

Der erwartete Wert wird durch $ {\ mathbb E} [\ cdot] $ dargestellt. Mit anderen Worten

\mathbb{E}[x] = \mu\\
\mathbb{E}[x^2] = \mu^2 + \sigma^2\\
\mathbb{E}[(x-\mu)^2] = \sigma^2

Fassen Sie auch die Beobachtungsdaten zusammen

{\bf x} = (x_1,x_2\cdots x_N)^T

Es wird ausgedrückt als.

Wenn N Daten aus der Gaußschen Verteilung erzeugt werden, ist die Wahrscheinlichkeit, dass sie mit den beobachteten Daten $ {\ bf x} $ übereinstimmen, das Produkt der Wahrscheinlichkeit, dass jedes Daten $ x_1 \ sim x_n $ erzeugt wird.

p({\bf x}\,\lvert\,\mu,\sigma^2) = \prod_{n=1}^N\mathcal{N}(x_n\,\lvert\,\mu,\sigma^2)

Es wird sein. Dies nennt man "Wahrscheinlichkeit". Ich würde gerne $ \ mu, \ sigma ^ 2 $ finden, das diese Wahrscheinlichkeit "Wahrscheinlichkeit" maximiert, aber es ist schwierig zu berechnen, da es $ \ exp $ und $ \ prod $ enthält.

Nehmen Sie daher den Logarithmus beider Seiten, um die Berechnung wie folgt zu vereinfachen.

\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) $ ist eine Funktion, die y erhöht, wenn $ x $ zunimmt, wie unten gezeigt. test.jpg

Maximieren Sie also $ p ({\ bf x} , \ lvert , \ mu, \ sigma ^ 2) $ und $ \ ln p ({\ bf x} , \ lvert , \ mu, \ Das Maximieren von Sigma ^ 2) $ hat dieselbe Bedeutung.

Durch Differenzieren von $ \ mu, \ sigma ^ 2 $ und Setzen auf 0 wird es wie folgt.

\mu_{ML} = \frac{1}{N}\sum_{n}x_n\\
\sigma^2_{ML} = \frac{1}{N}\sum_{n}(x_n - \mu_{ML})^2

Um den erhaltenen Wert vom wahren Wert zu unterscheiden, wird er außerdem auf $ \ mu_ {ML}, \ sigma ^ 2_ {ML} $ gesetzt.

Vergleich mit dem wahren Wert

Die wahren Werte von Mittelwert und Varianz seien $ \ mu, \ sigma ^ 2 $.

Bei der Schätzung von $$ \ mu_ {ML}, \ sigma ^ 2_ {ML} $ unter Verwendung verschiedener Daten $ {\ bf x}, $$ mu_ {ML}, \ sigma ^ 2_ {ML} Lassen Sie uns herausfinden, welchen Wert $ wahrscheinlich annehmen wird. Berücksichtigen Sie insbesondere die erwarteten Werte von $ \ mu_ {ML}, \ sigma ^ 2_ {ML} $.

Wie für den Durchschnitt

\begin{align}
\mathbb{E}[\mu_{ML}] &= \frac{1}{N}\sum_{n}\mathbb{E}[x_n]\\
&=\mu
\end{align}

Entspricht dem wahren Durchschnitt. Auf der anderen Seite in Bezug auf die 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}

Beachten Sie, dass $ \ mu_ {ML} $ ein Wert ist, der basierend auf den Datenpunkten berechnet wird.

\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}

Weil es wird

\mathbb{E}[\sigma^2_{ML}] = \frac{N-1}{N}\sigma^2

Es stellt sich heraus, dass die geschätzte Varianz wahrscheinlich kleiner als der wahre Wert ist. Dieses Phänomen wird als Bias bezeichnet.

Implementierung 1

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt

#Plotdaten
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

#Echter Durchschnitt / Streuung
mu=3
sig2=1.0

#Anzahl der Daten, die für eine wahrscheinlichste Schätzung verwendet wurden
N=2

#Häufigkeit, mit der die wahrscheinlichste Schätzung vorgenommen wird
M=10000

#Generieren Sie M Satzdaten aus der wahren Verteilung mit N als einem Satz
x=np.sqrt(sig2)*np.random.randn(N,M)+mu

#Maximale Wahrscheinlichkeitsschätzung unter Verwendung von N Daten für M Sätze
mu_ml=(1/N)*x.sum(0)
sig2_ml=(1/N)*((x-mu_ml)**2).sum(0)

#Wahre Verteilung
plt.plot(X,gaussian(X,mu,sig2),'r',lw=15,alpha=0.5)

#Verteilung, die die Ergebnisse von M wahrscheinlichsten Schätzungen mittelt
plt.plot(X,gaussian(X,mu_ml.sum(0)/M,sig2_ml.sum(0)/M),'g')

#N für die Varianz der wahrscheinlichsten Schätzung/N-1x, um die Vorspannung zu entfernen
plt.plot(X,gaussian(X,mu_ml.sum(0)/M,sig2_ml.sum(0)/M * N/(N-1)),'b')

Ausführungsergebnis 1

Sie können sehen, dass die Varianz der wahrscheinlichsten Schätzung (grüne Linie) multipliziert mit $ \ frac {N} {N-1} $ (blaue Linie) und der wahren Verteilung (dicke rote Linie) übereinstimmt. test.png

Implementierung 2

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt

#Plotdaten
plotS = 1000
X = np.linspace(-1,1,plotS)

#Gaußsche Verteilungswahrscheinlichkeitsdichtefunktion
def gaussDist(x,mu,sig2):
    ret = np.exp(-(x-mu)**2/(2*sig2))/np.sqrt(2*np.pi*sig2)
    return ret

#Wahre Verteilung
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])

    #Trainingsdaten
    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')

    #Höchstwahrscheinlich geschätzte Verteilung
    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')
    
    #Wahre Verteilung
    plt.plot(X,Y_r,'g')

Ausführungsergebnis 2

Es ist ersichtlich, dass die geschätzte Verteilung (rot) tendenziell eine geringere Varianz aufweist als die wahre Verteilung (grün). test.png

Recommended Posts

PRML-Diagramm Abbildung 1.15 Verzerrung bei der Schätzung der wahrscheinlichsten Wahrscheinlichkeit der Gaußschen Verteilung
Höchstwahrscheinlich Schätzungsimplementierung des Themenmodells in Python
EM der gemischten Gaußschen Verteilung
PRML Kapitel 13 Wahrscheinlichste Schätzung Python-Implementierung des Hidden-Markov-Modells
PRML §3.3.1 Reproduzieren Sie das Konvergenzdiagramm der Parameterverteilung durch Bayes'sche lineare Regression
Beispiel für Python-Code für die Exponentialverteilung und die wahrscheinlichste Schätzung (MLE)