Implementiert in Python PRML Kapitel 1 Polygonkurvenanpassung

Lassen Sie uns an der Mustererkennung und dem maschinellen Lernen sowie an der Reproduktion der Abbildung "Polygon / Polygon-Kurvenanpassung" aus Kapitel 1 arbeiten. Ich möchte mit der Reproduktion von Abbildung 1.4 beginnen. Darüber hinaus bestätigt Abb. 1.6, dass eine Erhöhung der Datenanzahl die Genauigkeit der Prognose erhöht.

Es ist mathematisch und in Bezug auf die Implementierung nicht so schwierig, also habe ich versucht, es zu implementieren. Vorerst der erste Schritt.

Grober Ablauf der Implementierung

① Implementieren Sie (1.1).

 y(x, {\bf w}) = w_0 + w_1 x + w_1 x^2 + ...+ w_M x^M = \sum_{j=1}^M w_j x^M (1.1)

(2) Wenn der Wert erhalten wird, der (1.122) und (1.123) erfüllt, wird der Wert des Parameters $ {\ bf w} $ erhalten, der die quadratische Fehlerfunktion (1.2) minimiert.

E({\bf w}) = \frac{1}{2}  \sum_{n=1}^N \{{y({x_n, \bf x_n}) -t_n}^2 \}(1.2)
\sum_{j=0}^M {\bf A}_{ij} w_j = {\bf T}_i(1.122)
{\bf A}_i = \sum_{n=1}^N (x_n)^{i+j} (1.123)
{\bf T}_i = \sum_{n=1}^N (x_n)^i t_n (1.123)

Code

import numpy as np
import pandas as pd
from pylab import *
import matplotlib.pyplot as plt
#(1.1)
def y(x, W, M):
    Y = np.array([W[i] * (x ** i) for i in xrange(M+1)])
    return Y.sum()

#(1.2),(1.122),(1.123)
def E(x, t, M):
    A =np.zeros((M+1, M+1))
    for i in range(M+1):
        for j in range(M+1):
            A[i,j] = (x**(i+j)).sum()
        
    T = np.array([((x**i)*t).sum() for i in xrange(M+1)])
    return  np.linalg.solve(A, T)

if __name__ == "__main__":
    #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.arange(0, 1, 0.1)
    
    #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)
    
    for M in [0,1,3,9]:
        W = E(x_train, y_train, M)
        print W
    
        y_estimate = [y(x, W, M) for x in x_real]
    

        plt.plot(x_real, y_estimate, 'r-')
        plt.plot(x_train, y_train, 'bo') 
        plt.plot(x_real, y_real, 'g-')
        xlim(0.0, 1.0)
        ylim(-2, 2)
        title("Figure 1.4")

Ergebnis

Screen Shot 2015-09-18 at 05.30.20.png

Code

if __name__ == "__main__":
    M2 = 9

    N2 = 20
    x_train2 = np.arange(0, 1, 0.05)
    y_train2 =  np.sin(2*np.pi*x_train2) + np.random.normal(loc,scale,N2)

    N3 = 100
    x_train3 = np.arange(0,1, 0.01)
    y_train3 =  np.sin(2*np.pi*x_train3) + np.random.normal(loc,scale,N3)


    W2 = E(x_train2, y_train2, M2)
    W3 = E(x_train3, y_train3, M2)
    
    y_estimate2 = [y(x, W2, M2) for x in x_real]
    y_estimate3 = [y(x, W3, M2) for x in x_real]

    plt.subplot(1, 2, 1)
    plt.plot(x_real, y_estimate2, 'r-')
    plt.plot(x_train2, y_train2, 'bo') 
    plt.plot(x_real, y_real, 'g-')
    xlim(0.0, 1.0)
    ylim(-2, 2)
    title("Figure 1.6 left")

    plt.subplot(1, 2, 2)
    plt.plot(x_real, y_estimate3, 'r-')
    plt.plot(x_train3, y_train3, 'bo') 
    plt.plot(x_real, y_real, 'g-')
    xlim(0.0, 1.0)
    ylim(-2, 2)
    title("Figure 1.6 right")

Ergebnis

Screen Shot 2015-09-18 at 05.33.32.png

Recommended Posts

Implementiert in Python PRML Kapitel 1 Polygonkurvenanpassung
Implementiert in Python PRML Kapitel 7 Nichtlineare SVM
PRML Kapitel 1 Bayesian Curve Fitting Python-Implementierung
Implementiert in Python PRML Kapitel 5 Neuronales Netzwerk
Implementiert in Python PRML Kapitel 1 Bayesianische Schätzung
Implementiert in Python PRML Kapitel 3 Bayesianische lineare Regression
[Python] Kurvenanpassung mit Polypolyse
Implementiert in Python PRML Kapitel 4 Klassifizierung nach Perceptron-Algorithmus
PRML-Diagrammzeichnung Abbildung 1.4 Polygonkurvenanpassung
SimRank in Python implementiert
Shiritori in Python implementiert
Implementierte Supreme Solver in Python 3
Implementierte Bildsegmentierung in Python (Union-Find)
100 Sprachverarbeitung Knock Kapitel 1 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
PRML Kapitel 4 Bayesianische logistische Regression 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 6 Gaussian Return Python-Implementierung
PRML Kapitel 2 Python-Implementierung von Student t-Distribution
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
Ich habe versucht, Robinsons Bayesian Spam Filter mit Python zu implementieren
Einführung in die Überprüfung der Wirksamkeit Kapitel 3 in Python geschrieben
So vereinfachen Sie die eingeschränkte Polypoly-Anpassung in Python
Implementieren Sie die Wiederholung und Erkundung von Gedenkstätten in Python und Go
[Python] Automatisierung zum Kopieren von Excel-Dateien implementiert
PRML Kapitel 11 Implementierung der Markov-Kette Monte Carlo Python
PRML Kapitel 12 Bayesianische Hauptanalyse Python-Implementierung
Ich habe versucht, die inverse Gammafunktion in Python zu implementieren
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Implementieren Sie den PRML-Algorithmus in Python (fast nur Numpy)
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python