Meine Verlaufabstiegsfunktion funktioniert nicht wie erwartetPython

Python-Programme
Anonymous
 Meine Verlaufabstiegsfunktion funktioniert nicht wie erwartet

Post by Anonymous »

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: Select all

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:

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post