Ich habe ein Skript geschrieben, um die wahrscheinlichste geschätzte Lösung zu finden.
script.py
import numpy as np
from numpy.linalg import inv
import matplotlib.pyplot as plt
M = 10 #Modellkomplexität
N = 20 #Die Anzahl der Daten
L = 10 #Anzahl der Datensätze
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)
#Planungsmatrix(3.16 Formeln)Berechnung von
PHI = np.array([phi(ary_mu,x) for x in x_train]).reshape(N,M)
#Höchstwahrscheinlich geschätzte Lösung(3.Typ 15)Berechnung von
w_ml = inv(PHI.transpose().dot(PHI)).dot(PHI.transpose()).dot(y_train)
#Verwenden Sie unten, um es regelmäßig zu machen
# 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)
Ich habe Daten mit generiert und die Ergebnisse für jeden Datensatz angezeigt.
Wenn nicht reguliert
Wenn die Regularisierung durchgeführt wird
ist. Irgendwie ist der Effekt der Regularisierung herausgekommen.
Recommended Posts