Implémenté en Python PRML Chapitre 1 Estimation bayésienne

Dans la continuité de la dernière fois, il s'agit d'une implémentation de l '"estimation bayésienne 1.2.6" du chapitre 1 de PRML. Il s'agit d'une reproduction de la figure 1.17, mais avec M = 9, la moyenne de la distribution prédite et la plage de ± 1σ sont indiquées.

C'était abstrait quand j'ai suivi la formule, et cela ne m'est pas venu. En l'implémentant, j'ai été frappé par la visualisation concrète que (1.70) et (1.71) montrent la distribution. Il ne peut pas être déterminé à partir de cet exemple en quoi cette précision de prédiction diffère de l'ajustement de courbe polymorphe précédent, Cela a été très utile pour comprendre à quoi chacun ressemble.

Flux de mise en œuvre approximatif

(1) Ce que vous voulez trouver est la distribution prévue (1,69).

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

② Cette fois, la fonction de base est $ \ phi_i (x) = x ^ i $ pour $ i = 0, ... M $.

(3) Puisqu'il existe les trois formules suivantes pour calculer la moyenne et la variance de la distribution prédite, implémentez chacune d'elles pour visualiser la distribution dans la plage prédite de 0,0 $ <x <1,0 $.

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

résultat

Screen Shot 2015-09-18 at 07.22.52.png

Recommended Posts

Implémenté en Python PRML Chapitre 1 Estimation bayésienne
Implémenté en Python PRML Chapitre 3 Régression linéaire bayésienne
Implémenté en Python PRML Chapitre 7 SVM non linéaire
Implémenté dans Python PRML Chapitre 1 Ajustement de courbe polygonale
Implémenté en Python PRML Chapitre 4 Classification par algorithme Perceptron
PRML Chapitre 4 Implémentation Python de la régression logistique bayésienne
PRML Chapitre 1 Implémentation de Python pour l'ajustement de courbe bayésienne
Implémentation de SimRank en Python
Implémentation de Shiritori en Python
J'ai essayé d'implémenter le filtre anti-spam bayésien de Robinson avec python
PRML Chapitre 12 Mise en œuvre de l'analyse principale bayésienne Python
Le point addictif du "raisonnement de Bayes expérimenté en Python"
Implémentation de Supreme Solver dans Python 3
[Python] Estimation bayésienne avec Pyro
Implémentation de la segmentation d'image en python (Union-Find)
100 Language Processing Knock Chapitre 1 en Python
PRML Chapitre 5 Implémentation Python du réseau neuronal
GPyOpt, un package d'optimisation bayésienne en Python
Règles d'apprentissage Widrow-Hoff implémentées en Python
Implémentation de la méthode de propagation d'étiquettes en Python
PRML Chapitre 3 Preuve Implémentation approximative de Python
Implémentation des règles d'apprentissage Perceptron en Python
Implémenté en 1 minute! LINE Notify en Python
PRML Chapitre 8 Algorithme Somme des produits Implémentation Python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
PRML Chapter 5 Implémentation Python de réseau à densité mixte
Un client HTTP simple implémenté en Python
PRML Chapitre 9 Implémentation Python de distribution gaussienne mixte
PRML Chapitre 14 Implémentation Python de modèle mixte conditionnel
PRML Chapitre 10 Implémentation Python de distribution gaussienne mixte
PRML Chapitre 6 Implémentation Python Gaussian Return
PRML Chapter 2 Student t-Distribution Python Implementation
J'ai essayé d'utiliser l'optimisation bayésienne de Python
J'ai essayé d'implémenter la régression logistique de Cousera en Python
Mise en œuvre du tri Stuge dans Python 3 (tri à bulles et tri rapide)
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Livre de canard implémenté en Python "Modélisation statistique Bayes avec Stan et R"
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Introduction à la vérification de l'efficacité Chapitre 3 écrit en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
[Python] Automatisation implémentée pour la copie de fichiers Excel
N-Gram en Python
PRML Chapitre 11 Implémentation Python Monte Carlo Chaîne de Markov
Programmation avec Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
J'ai essayé d'implémenter la fonction gamma inverse en python