Ich habe also eine glockenförmige Verteilung von Punkten, auf die ich eine Gaußsche Funktion anpassen möchte. Höhepunkt dieser Glocke. Die Verteilung und der Ort dieser Lücke sind immer symmetrisch. Meine Daten.
Die Funktion, die ich verwende, ist scipy.optimize.curve_fit mit einer ungebundenen Methode mit der kleinsten Quadrate.
Die Gaußsche Funktion, die ich verwende, hat die folgende Form: < /p>
Code: Select all
def gauss_function(self,x, a, b, c):
x = np.array(x)
return a*np.exp(-(x.astype(float)-b)**2/(2*c**2))
Im Folgenden finden Sie ein Diagramm der optimierten Gaußschen Anpassung meiner Daten, wenn keine Lücke vorhanden ist, die schwarze Linie die optimierte Funktion ist und die blauen Punkte die Daten sind: < Br/>
Ideen, wie man dies behebt, oder warum dies möglicherweise auftritt ? Insbesondere habe ich den y-Achse-Intercept hinzugefügt, e :
Code: Select all
def gauss_function(self,x, a, b, c, e):
x = np.array(x)
return a*np.exp(-(x.astype(float)-b)**2/(2*c**2))+e
< /code>
Dies hat das Problem nicht gelöst, stattdessen machte es die Anpassung der Daten, die keine Lücke hatten, schlimmer noch, da der Optimierer nun einen zusätzlichen Parameter einfügen musste. Der Parameter e
ist in diesem Fall nicht einmal benötigt, da die Daten so verteilt sind Dann hatte ich die Idee, eine anfängliche Vermutung als P0 -attribut für die Funktion curve_fit für die Parameter basierend auf Funktionen, die sie zuvor zugefügt hatten, einzugeben. Dies hat funktioniert, aber es erfordert, dass die erste Kurve in meinem Datensatz eine ohne Lücke ist, und dies kann nicht immer garantiert werden. .