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 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...