Ich versuche, eine logistische Funktion an einem Datensatz zu modellieren. Die Parameter für diese Funktion berechnen ich mithilfe von Gradientenabsenken, wodurch eine Verlustfunktion minimiert wird. Mit scipy.curve_fit funktioniert dies gut, aber wenn ich versuche, neu zu erstellen, sind die Parameter wirklich ausgeschaltet. Sehen Sie, warum dies der Fall ist?
def loss(fn, fnargs, target):
# target is a dict holding the inputs as keys and outputs as values
# fnargs are the function arguments, I try to compute
err = 0
for x in target:
err += (fn(x, **fnargs) - target[x])**2
return err / len(target)
def gradientVector(fn, fnargs, fixedargs=None):
gradient = {}
for alpha in fnargs:
argsPos = fnargs.copy()
argsPos[alpha] += 0.001
gradient[alpha] = ((fn(fnargs=argsPos, **fixedargs) - fn(fnargs=fnargs, **fixedargs)) / 0.001)
return gradient
# this will be the target function as a dictionary
target_function = {}
for i, x in enumerate(time_numeric):
target_function[x] = y[i]
def curve_params(function, target):
sig = signature(function).parameters.copy()
(k := next(iter(sig)), sig.pop(k))
for i, param in enumerate(sig):
sig[param] = 1.0
# print(function(t=0, **sig))
error = loss(function, sig, target)
for i in range(1000):
g = gradientVector(loss, sig, fixedargs={'fn': function, 'target':target})
for param in sig:
sig[param] -= 0.001 * g[param]
error = loss(function, sig, target)
print(g, error)
return sig
< /code>
und der Code zum Rendering: < /p>
fig, ax = plt.subplots()
ax.scatter(times, y, s=10, c='blue') # Increased size for visibility
ax.plot(times, trend_line, color='red', label='Power Law Fit')
sig = curve_params(logistic, target_function)
predicted_function = logistic(time_numeric, **sig)
ax.plot(times, mytrendline, color='green')
ax.set_title('...')
ax.set_xlabel('Date')
ax.set_ylabel('Volume')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
, der die Kurve von Scipy in Rot und Mine in Grün erzeugt:
Ich versuche, eine logistische Funktion an einem Datensatz zu modellieren. Die Parameter für diese Funktion berechnen ich mithilfe von Gradientenabsenken, wodurch eine Verlustfunktion minimiert wird. Mit scipy.curve_fit funktioniert dies gut, aber wenn ich versuche, neu zu erstellen, sind die Parameter wirklich ausgeschaltet. Sehen Sie, warum dies der Fall ist?[code]def loss(fn, fnargs, target): # target is a dict holding the inputs as keys and outputs as values # fnargs are the function arguments, I try to compute err = 0 for x in target: err += (fn(x, **fnargs) - target[x])**2 return err / len(target)
return sig < /code> und der Code zum Rendering: < /p> fig, ax = plt.subplots() ax.scatter(times, y, s=10, c='blue') # Increased size for visibility ax.plot(times, trend_line, color='red', label='Power Law Fit') sig = curve_params(logistic, target_function) predicted_function = logistic(time_numeric, **sig) ax.plot(times, mytrendline, color='green')
ax.set_title('...') ax.set_xlabel('Date') ax.set_ylabel('Volume') plt.xticks(rotation=45) plt.tight_layout() plt.show() [/code] , der die Kurve von Scipy in Rot und Mine in Grün erzeugt:
Ich habe ein Akkordeon aus dem W3 -School -Beispiel erstellt. Es funktioniert wie erwartet, wenn ich es getrennt halte. Aber wenn ich es mit anderen Eingängen platziere, funktioniert es nur als...
Ich versuche, mithilfe von „interact.js“ in meinem CodePen-Projekt mehrere Elemente ziehbar zu machen, aber es funktioniert nicht wie erwartet. Wenn ich den Elementen das Attribut „draggable= true...
Ich versuche, mithilfe von „interact.js“ in meinem CodePen-Projekt mehrere Elemente ziehbar zu machen, aber es funktioniert nicht wie erwartet. Wenn ich den Elementen das Attribut „draggable= true...
Ich versuche, mithilfe von „interact.js“ in meinem CodePen-Projekt mehrere Elemente ziehbar zu machen, aber es funktioniert nicht wie erwartet. Wenn ich den Elementen das Attribut „draggable= true...