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

长数据集非线性回归:Gekko目标值与手动计算差异原因

问题原因分析

核心问题:Gekko符号变量与Numpy数值函数不兼容

你在Gekko中直接使用np.sum()、np.mean()等Numpy函数处理Gekko变量(ym应为你定义的m.Var()类型变量),这是错误操作:

  • Gekko变量是符号变量,用于构建优化问题的数学模型,而非直接的数值数组;Numpy函数仅能处理数值型数据,无法识别Gekko的符号变量逻辑,会导致Gekko内部的符号计算与你手动的数值计算完全脱节。
  • 例如np.mean(ym)只会计算ym初始值的均值,而非优化过程中ym实时更新后的均值,直接导致目标函数的计算逻辑完全错误。

其他可能的细节问题

  • 目标函数写法错误:必须用Gekko内置的m.sum()、m.mean()替代Numpy的对应函数,才能正确构建符号化的目标函数。比如将np.sum((ym-np.array(y))**2)改为m.sum((ym-y)**2)(假设y是数值数组,可直接传入Gekko)。
  • 括号与运算优先级:你的公式中(np.sum(...) / N) / (np.sum(...) / N)可简化为np.sum(...) / np.sum(...)再开根号,但如果在Gekko中因符号计算的优先级处理不当,可能出现与手动计算不同的结果。
  • 目标函数逻辑偏差:Gekko返回值与手动值差异极大,大概率是符号计算中错误地将分子分母搞反,或是遗漏开根号、重复计算N的影响。

修正示例

改用Gekko内置函数重构目标函数:

# 假设y是数值数组,ym是Gekko变量数组
sse = m.sum((ym - y)**2)
ssr = m.sum((ym - m.mean(ym))**2)
objective = m.sqrt(sse / ssr)
m.Obj(objective)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:37:01