Implementiert in Python PRML Kapitel 1 Bayesianische Schätzung

Es ist eine Implementierung der "1.2.6 Bayes'schen Schätzung" aus PRML Kapitel 1. Dies ist eine Reproduktion von Abbildung 1.17, aber mit M = 9 werden der Mittelwert der vorhergesagten Verteilung und der Bereich von ± 1σ angezeigt.

Es war abstrakt, als ich gerade der Formel folgte, und es kam mir nicht. Bei der Implementierung fiel mir die konkrete Visualisierung auf, dass (1.70) und (1.71) die Verteilung zeigen. Aus diesem Beispiel kann nicht bestimmt werden, wie sich diese Vorhersagegenauigkeit von der vorherigen polymorphen Kurvenanpassung unterscheidet. Es war sehr hilfreich zu verstehen, wie jeder einzelne aussieht.

Grober Ablauf der Implementierung

(1) Was Sie finden möchten, ist die vorhergesagte Verteilung (1,69).

 p(t| x, {\bf x}, {\bf t}) = N(t| m(x), s^2(x)) (1.69)

② Diesmal lautet die Basisfunktion $ \ phi_i (x) = x ^ i $ für $ i = 0, ... M $.

(3) Da es die folgenden drei Formeln zur Berechnung des Mittelwerts und der Varianz der vorhergesagten Verteilung gibt, implementieren Sie jede von ihnen, um die Verteilung im vorhergesagten Bereich von $ 0,0 <x <1,0 $ zu visualisieren.

m(x) = \beta\phi(x)^{\bf T}{\bf S} \sum_{n=1}^N \phi(x_n)t_n(1.70)]
 s^2(x) = \beta^{-1} + \phi(x)^{\bf T} {\bf S} \phi(x)(1.71)
{\bf S}^{-1} = \alpha {\bf I} + \beta \sum_{n=1}^N \phi(x_n)\phi(x_n)^{\bf T}(1.72)

Code

import numpy as np
from numpy.linalg import inv
import pandas as pd
from pylab import *
import matplotlib.pyplot as plt

#From p31 the auther define phi as following
def phi(x):
    return np.array([x**i for i in xrange(M+1)]).reshape((M+1, 1))

#(1.70) Mean of predictive distribution
def m(x, x_train, y_train, S):
    sum = np.array(zeros((M+1, 1)))
    for n in xrange(len(x_train)):
        sum += np.dot(phi(x_train[n]), y_train[n])
    return Beta * phi(x).T.dot(S).dot(sum)

    
#(1.71) Variance of predictive distribution   
def s2(x, S):
    return 1.0/Beta + phi(x).T.dot(S).dot(phi(x))

#(1.72)
def S(x_train, y_train):
    I = np.identity(M+1)
    Sigma = np.zeros((M+1, M+1))
    for n in range(len(x_train)):
        Sigma += np.dot(phi(x_train[n]), phi(x_train[n]).T)
    S_inv = alpha*I + Beta*Sigma
    S = inv(S_inv)
    return S

if __name__ == "__main__":
    alpha = 0.005
    Beta = 11.1
    M = 9
    
    #Sine curve
    x_real = np.arange(0, 1, 0.01)
    y_real = np.sin(2*np.pi*x_real)
    
    ##Training Data
    N=10
    x_train = np.linspace(0, 1, 10)
    
    #Set "small level of random noise having a Gaussian distribution"
    loc = 0
    scale = 0.3
    y_train =  np.sin(2*np.pi*x_train) + np.random.normal(loc,scale,N)
    
    
    S = S(x_train, y_train)
    
    #Seek predictive distribution corespponding to entire x
    mean = [m(x, x_train, y_train, S)[0,0] for x in x_real]
    variance = [s2(x, S)[0,0] for x in x_real]
    SD = np.sqrt(variance)
    upper = mean + SD
    lower = mean - SD
    
    
    plot(x_train, y_train, 'bo')
    plot(x_real, y_real, 'g-')
    plot(x_real, mean, 'r-')
    fill_between(x_real, upper, lower, color='pink')
    xlim(0.0, 1.0)
    ylim(-2, 2)
    title("Figure 1.17")

Ergebnis

Screen Shot 2015-09-18 at 07.22.52.png

Recommended Posts

Implementiert in Python PRML Kapitel 1 Bayesianische Schätzung
Implementiert in Python PRML Kapitel 3 Bayesianische lineare Regression
Implementiert in Python PRML Kapitel 7 Nichtlineare SVM
Implementiert in Python PRML Kapitel 1 Polygonkurvenanpassung
Implementiert in Python PRML Kapitel 4 Klassifizierung nach Perceptron-Algorithmus
PRML Kapitel 4 Bayesianische logistische Regression Python-Implementierung
PRML Kapitel 1 Bayesian Curve Fitting Python-Implementierung
SimRank in Python implementiert
Shiritori in Python implementiert
Ich habe versucht, Robinsons Bayesian Spam Filter mit Python zu implementieren
PRML Kapitel 12 Bayesianische Hauptanalyse Python-Implementierung
Der süchtig machende Punkt des "Bayes-Denkens in Python"
Implementierte Supreme Solver in Python 3
[Python] Bayesianische Schätzung mit Pyro
Implementierte Bildsegmentierung in Python (Union-Find)
100 Sprachverarbeitung Knock Kapitel 1 in Python
PRML Kapitel 5 Python-Implementierung für neuronale Netze
GPyOpt, ein Paket zur Bayes'schen Optimierung in Python
In Python implementierte Widrow-Hoff-Lernregeln
Implementierte Methode zur Weitergabe von Etiketten in Python
PRML Kapitel 3 Evidence Ungefähre Python-Implementierung
Implementierte Perceptron-Lernregeln in Python
Implementiert in 1 Minute! LINE Benachrichtigen in Python
PRML Kapitel 8 Summe der Produkte Algorithmus Python-Implementierung
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
PRML Kapitel 5 Python-Implementierung eines Netzwerks mit gemischter Dichte
Ein einfacher HTTP-Client, der in Python implementiert ist
PRML Kapitel 9 Mixed Gaussian Distribution Python-Implementierung
PRML Kapitel 14 Bedingte gemischte Modell-Python-Implementierung
PRML Kapitel 10 Variante Mixed Gaussian Distribution Python-Implementierung
PRML Kapitel 6 Gaussian Return Python-Implementierung
PRML Kapitel 2 Python-Implementierung von Student t-Distribution
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
Ich habe versucht, Couseras logistische Regression in Python zu implementieren
Stuge Sort in Python 3 implementiert (Bubble Sort & Quick Sort)
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
Entenbuch in Python implementiert "Bayes statistische Modellierung mit Stan und R"
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
SendKeys in Python
Einführung in die Überprüfung der Wirksamkeit Kapitel 3 in Python geschrieben
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
[Python] Automatisierung zum Kopieren von Excel-Dateien implementiert
N-Gramm in Python
PRML Kapitel 11 Implementierung der Markov-Kette Monte Carlo Python
Programmieren mit Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
Ich habe versucht, die inverse Gammafunktion in Python zu implementieren