[PYTHON] PRML-Diagrammzeichnung Aufgabe 1.4 Nichtlineare Transformation der Wahrscheinlichkeitsdichtefunktion

Was du machen willst

Angenommen, die Wahrscheinlichkeitsvariablen $ x $ und $ y $ haben eine Beziehung von $ x = g (y) $. Nehmen Sie außerdem an, dass Sie die Wahrscheinlichkeitsdichtefunktion $ p_x (x) $ für $ x $ kennen. Betrachten Sie zu diesem Zeitpunkt die Form der Wahrscheinlichkeitsdichtefunktion $ p_y (y) $ für $ y $.

Erläuterung

Eine einfache Konvertierung wäre $ p_x (g (y)) $, was eine Wahrscheinlichkeitsdichtefunktion für $ x $ ist, also $ p_y (y) \ neq p_x (g (y)) $.

Die Beziehung zwischen $ p_x (x) $ und $ p_y (y) $ gilt für jeden Bereich $ x_1 \ sim x_2 $.

\int_{x_1}^{x_2} p_x(x) \mathrm{d}x = \int_{g^{-1}(x_1)}^{g^{-1}(x_2)} p_y(y) \mathrm{d}y

Sollte sein. $ G ^ {-1} (x) $ ist jedoch die Umkehrfunktion von $ g (x) $.

Unter Verwendung der variablen Transformationsformel des Integrals

\begin{align}
\int_{x_1}^{x_2} p_x(x) \mathrm{d}x&=\int_{x_1}^{x_2} p_x(g(y)) \mathrm{d}x\\
&=\int_{g^{-1}(x_1)}^{g^{-1}(x_2)} p_x(g(y))\left|
\frac{\partial g(y)}{\partial y}\right| \mathrm{d}y
\end{align}

Deshalb,

p_y(y) = p_x(g(y))\left|
\frac{\partial g(y)}{\partial y}\right|

Es wird sein.

Implementierung

p_x(x) = \mathcal{N}(x\mid\mu,\sigma^2)\\
x = g(y) = \ln(y)-\ln(1-y)+5\\
y = g^{-1}(x) = \frac{1}{1+\exp(-x+5)}

Betrachten Sie den Fall von.

\frac{\partial g(y)}{\partial y} = \frac{1}{y(1-y)}

Als,

p_y(y) = \mathcal{N}(g(y)\mid\mu,\sigma^2)\frac{1}{y(1-y)} 

Überprüfen Sie, ob dies mit dem Histogramm der Daten übereinstimmt, die durch Konvertieren der Stichprobe von $ p_x (x) $ mit $ y = g ^ {-1} (x) $ erhalten wurden.

Code


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

import numpy as np
import matplotlib.pyplot as plt

#Gaußsche Verteilungsdichtefunktion
def gaussianDist(sig,mu,x):
    y=np.exp(-(x-mu)**2/(2*sig**2))/(np.sqrt(2*np.pi)*sig)
    return y

#Probabilistische Variablenumwandlungsfunktion
def g(y):
    x=np.log(y)-np.log(1-y)+5
    return x
    
#Inverse Funktion der Umrechnungsfunktion der stochastischen Variablen
def invg(x):
    y=1/(1+np.exp(-x+5))
    return y

#Gaußsche Verteilung px(x)Durchschnitt, Streuung
sig=1.0
mu=6

#Anzahl der Histogrammproben
N = 50000 

plt.xlim([0,10])
plt.ylim([0,1])

####
x = np.linspace(0,10,100)

#Zeichnen Sie die Konvertierungsfunktion stochastischer Variablen
y=invg(x)
plt.plot(x,y,'b')

#px(x)Handlung
y = gaussianDist(sig,mu,x)
plt.plot(x,y,'r')

#px(x)Zeichnen Sie das Histogramm basierend auf der Probe von
x_sample = mu + sig * np.random.randn(N)
plt.hist(x_sample,bins=20,normed=True,color='lavender')


####
y=np.linspace(0.01,0.99,100)

##py(y)Handlung
x=gaussianDist(sig,mu,g(y))/(y*(1-y))
plt.plot(x,y,'m')

#px(x)Probe aus g^-1(x)Zeichnen Sie das Histogramm der in konvertierten Daten
y_sample = invg(mu + sig * np.random.randn(N))
plt.hist(y_sample,bins=20,normed=True,orientation="horizontal",color='lavender')

#px(g(y))Zeichnen Sie die konvertierte Funktion einfach wie
x = gaussianDist(sig,mu,g(y))
plt.plot(x/(x.sum()*0.01) ,y,'lime')

####
#Durchschnittliches mu und g^-1(mu)Zeichnen Sie die Beziehung mit
plt.plot([mu, mu], [0, invg(mu)], 'k--')
plt.plot([0, mu], [invg(mu), invg(mu)], 'k--')

Ausführungsergebnis

test.png

Recommended Posts

PRML-Diagrammzeichnung Aufgabe 1.4 Nichtlineare Transformation der Wahrscheinlichkeitsdichtefunktion
Besiege die Wahrscheinlichkeitsdichtefunktion der Normalverteilung
Vorsichtsmaßnahmen bei der Überlagerung der Wahrscheinlichkeitsdichtefunktion und des Histogramms in matplotlib
PRML-Diagrammzeichnung Abbildung 1.4 Polygonkurvenanpassung