Implementiert in Python PRML Kapitel 3 Bayesianische lineare Regression

Mustererkennung und maschinelles Lernen, Kapitel 3 reproduziert, wie die Bayes'sche lineare Regression die vorhergesagte Verteilung konvergiert. Was wir tun, ist fast dasselbe wie die Bayes'sche Schätzung, die wir in Kapitel 1 gemacht haben, nur die Basisfunktion ist die Gaußsche Funktion (3.4). Daher wird der Code fast umgeleitet.

Im Vergleich zu Kapitel 1 schreibt Kapitel 3 den Ausdruck mathematischer Formeln für den Umgang mit Vektoren neu. Gibt es in diesem Bereich eine Absicht? Ich frage mich, ob dies die Art zu schreiben ist, weil ich das Konzept des Merkmalsvektors in (3.16) hier eingeführt habe, aber was ist damit?

Grober Ablauf der Implementierung

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

 p(t|{\bf x}, {\bf t}, \alpha, \beta) = N (t| {\bf m}^T_N \phi({\bf x}),  \sigma^2_N ({\bf x})) (3.58)

② Die Basisfunktion ist (3.4) $ \ phi_i (x) = \ exp \ {- \ frac {(x- \ mu_j) ^ 2} {2s ^ 2} } $. Obwohl 9 Basisfunktionen angegeben sind, sind sie so angeordnet, dass sie gleichmäßig verteilt sind, da es keine Anweisungen zum Anordnen gibt.

(3) Da es die folgenden drei Formeln zur Berechnung des Mittelwerts und der Varianz der vorhergesagten Verteilung gibt, implementieren Sie jede dieser Formeln, um die vorhergesagte Verteilung zu erhalten.

{\bf m}_N = \beta{\bf S}_N\Phi(x_n)^{\bf T}{\bf t}(3.53)
\sigma^2_N(x) = \beta^{-1} + \phi({\bf x})^{\bf T} {\bf S}_N \phi({\bf x}). (3.59)
{\bf S}^{-1}_N = \alpha {\bf I} + \beta\Phi^{\bf T}\Phi(3.54)

Code

Beim Zeichnen der Abbildung zeigt @ naoya_ts Dieser Artikel (Reproduktion der Platte der Bayes'schen linearen Regression (PRML§3.3)), wie die Probendaten mit zunehmender Konvergenz konvergieren. ) Ich war mir nicht sicher, ob ich auf die Idee kommen könnte, schöner zu zeichnen, also benutzte ich sie als Referenz, fast wie eine Kopie. Vielen Dank.

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

def func(x_train, y_train):
    # (3.4) Gaussian basis function
    def phi(s, mu_i, M, x):
        return np.array([exp(-(x - mu)**2 / (2 * s**2)) for mu in mu_i]).reshape((M, 1))

    #(3.53)' ((1.70)) Mean of predictive distribution
    def m(x, x_train, y_train, S):
        sum = np.array(zeros((M, 1)))
        for n in xrange(len(x_train)):
            sum += np.dot(phi(s, mu_i, M, x_train[n]), y_train[n])
        return Beta * phi(s, mu_i, M, x).T.dot(S).dot(sum)
    
    #(3.59)'((1.71)) Variance of predictive distribution   
    def s2(x, S):
        return 1.0/Beta + phi(s, mu_i, M, x).T.dot(S).dot(phi(s, mu_i, M, x))

    #(3.53)' ((1.72))
    def S(x_train, y_train):
        I = np.identity(M)
        Sigma = np.zeros((M, M))
        for n in range(len(x_train)):
            Sigma += np.dot(phi(s, mu_i, M, x_train[n]), phi(s, mu_i, M, x_train[n]).T)
        S_inv = alpha*I + Beta*Sigma
        S = inv(S_inv)
        return S
    
    #params for prior probability
    alpha = 0.1
    Beta = 9
    s = 0.1

    #use 9 gaussian basis functions
    M = 9

    # Assign basis functions
    mu_i = np.linspace(0, 1, M)
    
    S = S(x_train, y_train)

    #Sine curve
    x_real = np.arange(0, 1, 0.01)
    y_real = np.sin(2*np.pi*x_real)
    
    #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 3.8")
    show()

if __name__ == "__main__":
    # Maximum observed data points (underlining function plus some noise)
    x_train = np.linspace(0, 1, 26)

    #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,26)


    #Sample data pick up
    def randidx(n, k):
        r = range(n)
        shuffle(r)
        return sort(r[0:k])

    for k in (1, 2, 5, 26):
        indices = randidx(size(x_train), k)
        func(x_train[indices], y_train[indices])

Ergebnis

Screen Shot 2015-09-21 at 00.20.33.png Screen Shot 2015-09-21 at 00.21.00.png Screen Shot 2015-09-21 at 00.21.21.png Screen Shot 2015-09-21 at 00.21.32.png

Referenz

Reproduktion der Bayes'schen linearen Regression (PRML §3.3)

Recommended Posts

Implementiert in Python PRML Kapitel 3 Bayesianische lineare Regression
Implementiert in Python PRML Kapitel 1 Bayesianische Schätzung
PRML Kapitel 4 Bayesianische logistische Regression Python-Implementierung
Implementiert in Python PRML Kapitel 7 Nichtlineare SVM
Implementiert in Python PRML Kapitel 5 Neuronales Netzwerk
Implementiert in Python PRML Kapitel 1 Polygonkurvenanpassung
Online lineare Regression in Python
"Lineare Regression" und "Probabilistische Version der linearen Regression" in Python "Bayes lineare Regression"
Implementiert in Python PRML Kapitel 4 Klassifizierung nach Perceptron-Algorithmus
Lineare Regression in Python (Statmodelle, Scikit-Learn, PyMC3)
Online lineare Regression in Python (Robuste Schätzung)
PRML Kapitel 6 Gaussian Return Python-Implementierung
PRML Kapitel 1 Bayesian Curve Fitting Python-Implementierung
Plattenreproduktion der Bayes'schen linearen Regression (PRML §3.3)
Ich habe versucht, Couseras logistische Regression in Python zu implementieren
Ich habe versucht, Robinsons Bayesian Spam Filter mit Python zu implementieren
SimRank in Python implementiert
Ich habe versucht, die Bayes'sche lineare Regression durch Gibbs-Sampling in Python zu implementieren
PRML Kapitel 12 Bayesianische Hauptanalyse Python-Implementierung
Lineare Suche in Python
Shiritori in Python implementiert
Regressionsanalyse mit Python
Python-Implementierung der Bayes'schen linearen Regressionsklasse
Coursera Machine Learning Challenge in Python: ex1 (lineare Regression)
Mehrfacher Regressionsausdruck in Python
Implementierte Supreme Solver in Python 3
Einfache Regressionsanalyse mit Python
[Python] Lineare Regression mit Scicit-Learn
PRML Kapitel 7 Verwandte Vector Machine Python-Implementierung für Regressionsprobleme
Erste einfache Regressionsanalyse in Python
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
Einführung in die Bayes'sche statistische Modellierung mit Python ~ Versuch einer linearen Regression mit MCMC ~
PRML Kapitel 8 Summe der Produkte Algorithmus Python-Implementierung
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Entenbuch in Python implementiert "Bayes statistische Modellierung mit Stan und R"
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
Echte Werte und Eigenvektoren: Lineare Algebra in Python <7>
PRML Kapitel 14 Bedingte gemischte Modell-Python-Implementierung
PRML-Implementierung Kapitel 3 Lineares Basisfunktionsmodell
PRML Kapitel 10 Variante Mixed Gaussian Distribution Python-Implementierung
PRML Kapitel 2 Python-Implementierung von Student t-Distribution
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
<Kurs> Maschinelles Lernen Kapitel 1: Lineares Regressionsmodell
Lineare Regression
Lineare Unabhängigkeit und Basis: Lineare Algebra in Python <6>
Stuge Sort in Python 3 implementiert (Bubble Sort & Quick Sort)
PRML §3.3.1 Reproduzieren Sie das Konvergenzdiagramm der Parameterverteilung durch Bayes'sche lineare Regression
Einführung in Vektoren: Lineare Algebra in Python <1>
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben