具有 scipy 最小化功能的数据框
Dataframe with scipy minimize function
我正在尝试最小化适用于数据框的平方和函数。 df如下:
ds = pd.DataFrame({'t': [*np.linspace(0,300,7)], 'Ca': [0.05, 0.038, 0.0306, 0.0256, 0.0222, 0.0195, 0.0174]})
我使用和平方的模型是:
def model(params, t, ca0=0.05):
alpha = params[0]
k = params[1]
ca_pred = (ca0**(1-alpha) - (1-alpha)*k*t)**(1/(1-alpha))
return ca_pred
def sum_of_squares(params, t, ca, ca0=0.05):
ca_pred = model(params, t, ca0)
obj = ((ca - ca_pred)**2).sum()
return obj
Initial guess:
params = [1.5, 0.05]
我的具体疑问在这里,我不知道如何传递数据帧以在 sum_of_squares 最小化函数中使用“t”和“ca”:
res = minimize(fun=sum_of_squares, x0=params, tol=1e-3, method="Powell")
您可以使用 args
参数:
minimize(sum_of_squares, x0=params, args=(ds['t'], ds['Ca']), tol=1e-3, method="Powell")
或包装函数:
minimize(lambda x: sum_of_squares(x, ds["t"], ds["Ca"]), x0=params, tol=1e-3, method="Powell")
我正在尝试最小化适用于数据框的平方和函数。 df如下:
ds = pd.DataFrame({'t': [*np.linspace(0,300,7)], 'Ca': [0.05, 0.038, 0.0306, 0.0256, 0.0222, 0.0195, 0.0174]})
我使用和平方的模型是:
def model(params, t, ca0=0.05):
alpha = params[0]
k = params[1]
ca_pred = (ca0**(1-alpha) - (1-alpha)*k*t)**(1/(1-alpha))
return ca_pred
def sum_of_squares(params, t, ca, ca0=0.05):
ca_pred = model(params, t, ca0)
obj = ((ca - ca_pred)**2).sum()
return obj
Initial guess:
params = [1.5, 0.05]
我的具体疑问在这里,我不知道如何传递数据帧以在 sum_of_squares 最小化函数中使用“t”和“ca”:
res = minimize(fun=sum_of_squares, x0=params, tol=1e-3, method="Powell")
您可以使用 args
参数:
minimize(sum_of_squares, x0=params, args=(ds['t'], ds['Ca']), tol=1e-3, method="Powell")
或包装函数:
minimize(lambda x: sum_of_squares(x, ds["t"], ds["Ca"]), x0=params, tol=1e-3, method="Powell")