You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数定义时的参数解包:实现scipy curve_fit动态参数适配

解决方案

核心思路不需要动态修改函数定义的参数名,scipy.optimize.curve_fit 会按顺序传递待拟合参数,我们直接用可变参数*args接收后按规则拆分即可:

调整后的完整代码示例

import numpy as np
from scipy.optimize import curve_fit

def get_optimal_adstock_multivariate(x_var_names, final_df):
    y = np.array(final_df['Count Of Solutions'])
    n = len(x_var_names)
    # 生成参数名列表,后续用来映射最优结果
    coef_vars = [f"b{i+1}" for i in range(n)]
    rates = [f"rate_{i+1}" for i in range(n)]
    all_param_names = ["b0"] + coef_vars + rates

    def f(df, b0, *args):
        # args顺序和你定义的coef_vars + rates完全一致
        # 前n个为系数b,后n个为衰减率rate
        coefs = args[:n]
        rate_params = args[n:]
        
        # 这里替换为你自己的模型计算逻辑,以下是adstock模型示例
        pred = b0
        for idx in range(n):
            # 计算当前变量的adstock值
            col_vals = df[x_var_names[idx]]
            # 示例adstock计算:滞后加权求和
            adstock = 0
            adstock_vals = []
            for val in col_vals:
                adstock = val + rate_params[idx] * adstock
                adstock_vals.append(adstock)
            pred += coefs[idx] * np.array(adstock_vals)
        return pred

    # 调用curve_fit求解最优参数
    popt, pcov = curve_fit(f, final_df, y)
    # 把结果和参数名绑定,方便调用
    optimal_params = dict(zip(all_param_names, popt))
    return optimal_params, popt, pcov

逻辑说明

  • 拟合函数f用*args接收所有动态生成的待拟合参数,不需要显式定义每个参数名
  • 参数顺序和你提前生成的coef_vars + rates列表完全对应,按长度拆分后即可按索引取用
  • 求解完成后可以直接把最优值和你预设的参数名做映射,得到b1、rate_1等对应参数的最优结果

内容的提问来源于stack exchange,提问作者Nate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 03:48:01