Implémenté dans Python PRML Chapitre 1 Ajustement de courbe polygonale

Travaillons sur la reconnaissance de formes et le machine learning, et la reproduction de la figure "Polygon / Polygon Curve fit" du chapitre 1. Je voudrais commencer par la reproduction de la figure 1.4. De plus, la figure 1.6 confirme que l'augmentation du nombre de données augmentera la précision des prévisions.

Ce n'est pas si difficile mathématiquement et en termes de mise en œuvre, alors j'ai essayé de le mettre en œuvre. Pour le moment, la première étape.

Flux de mise en œuvre approximatif

① Mettre en œuvre (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) Lorsque les valeurs satisfaisant (1.122) et (1.123) sont obtenues, la valeur du paramètre $ {\ bf w} $ qui minimise la fonction d'erreur quadratique (1.2) est obtenue.

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

résultat

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

résultat

Screen Shot 2015-09-18 at 05.33.32.png

Recommended Posts

Implémenté dans Python PRML Chapitre 1 Ajustement de courbe polygonale
Implémenté en Python PRML Chapitre 7 SVM non linéaire
PRML Chapitre 1 Implémentation de Python pour l'ajustement de courbe bayésienne
Implémenté dans Python PRML Chapter 5 Neural Network
Implémenté en Python PRML Chapitre 1 Estimation bayésienne
Implémenté en Python PRML Chapitre 3 Régression linéaire bayésienne
[Python] Ajustement de courbe avec polypoly
Implémenté en Python PRML Chapitre 4 Classification par algorithme Perceptron
Schéma de schéma PRML Figure 1.4 Ajustement de la courbe polygonale
Implémentation de SimRank en Python
Implémentation de Shiritori en Python
Implémentation de Supreme Solver dans Python 3
Implémentation de la segmentation d'image en python (Union-Find)
100 Language Processing Knock Chapitre 1 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
PRML Chapitre 4 Implémentation Python de la régression logistique bayésienne
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 6 Implémentation Python Gaussian Return
PRML Chapter 2 Student t-Distribution Python Implementation
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
J'ai essayé d'implémenter le filtre anti-spam bayésien de Robinson avec python
Introduction à la vérification de l'efficacité Chapitre 3 écrit en Python
Comment simplifier l'ajustement polymorphe restreint en python
Implémenter la récurrence et l'exploration commémoratives dans Python and Go
[Python] Automatisation implémentée pour la copie de fichiers Excel
PRML Chapitre 11 Implémentation Python Monte Carlo Chaîne de Markov
PRML Chapitre 12 Mise en œuvre de l'analyse principale bayésienne Python
J'ai essayé d'implémenter la fonction gamma inverse en python
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Implémenter l'algorithme PRML en Python (presque uniquement Numpy)
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python