J'ai écrit un script pour trouver la solution estimée la plus probable.
script.py
import numpy as np
from numpy.linalg import inv
import matplotlib.pyplot as plt
M = 10 #Complexité du modèle
N = 20 #Le nombre de données
L = 10 #Nombre d'ensembles de données
ary_mu = np.linspace(0,1,M)
def phi(ary_mu, x):
ret = np.array([np.exp(-(x-mu)**2/(2*0.1**2)) for mu in ary_mu])
ret[0] = 1
return ret
for x in range(L):
x_train = np.linspace(0,1,N)
y_train = np.sin(2*np.pi*x_train) + np.random.normal(0,0.3,N)
#Matrice de planification(3.16 formules)Calculs de
PHI = np.array([phi(ary_mu,x) for x in x_train]).reshape(N,M)
#Solution estimée la plus probable(3.Type 15)Calculs de
w_ml = inv(PHI.transpose().dot(PHI)).dot(PHI.transpose()).dot(y_train)
#Utilisez ci-dessous pour le rendre régulier
# l = 0.3
# w_ml = inv(l*np.identity(M)+PHI.transpose().dot(PHI)).dot(PHI.transpose()).dot(y_train)
xx = np.linspace(0,1,100)
y = [phi(ary_mu,x).dot(w_ml) for x in xx]
plt.plot(xx,y)
plt.show()
sin(2*\pi*x) + N(0,0.3)
J'ai généré des données avec et affiché les résultats pour chaque ensemble de données.
Lorsque vous ne régularisez pas
Quand la régularisation est effectuée
est. D'une manière ou d'une autre, l'effet de la régularisation s'est manifesté.
Recommended Posts