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

使用scipy.optimize.curve_fit幂律拟合得到负R平方值的问题排查

负R²问题的原因说明

你得到负R²的核心逻辑是当前幂律拟合的残差平方和ss_res大于Y的总平方和ss_tot,说明你的拟合模型效果比直接用Y的平均值作为预测值还要差,1减去一个大于1的ss_res/ss_tot自然会得到负数,常见的诱因有以下几类:

  • 幂律函数适配性问题:scipy.optimize.curve_fit默认给参数的初始guess值全为1,如果你的X、Y取值存在特殊情况,比如X包含接近0的取值、Y包含负数,幂律函数a*x^b的输出范围根本无法匹配你的Y分布,会直接导致拟合完全偏离真实趋势。你可以先打印输出拟合得到的popt参数,看a、b的取值是不是和你对数据的预期明显不符,比如参数量级异常、b的正负和X-Y的趋势完全相反。
  • 数据本身不符合幂律分布:你做了[4:]的截断操作,如果截断后剩下的数据本身不存在幂律分布的趋势,拟合自然会失败。建议先绘制X-Y的原始散点图,确认分布是否符合幂律的单调凸/凹特征。
  • 计算逻辑的潜在错误:你用Pandas Series做计算,要确认X和Y的索引是对齐的,没有出现数据错位导致残差计算完全错误;另外可以单独打印ss_res和ss_tot的数值,确认是否真的存在ss_res > ss_tot的情况,如果Y的方差极小导致ss_tot趋近于0,也会导致分式计算异常。
  • 补充说明:非线性拟合的R²本身没有线性回归中“解释方差比例”的明确物理意义,就算得到正值也不能直接和线性模型的R²做横向对比。如果需要评估拟合效果,更建议使用残差均方根误差(RMSE),或者直接叠加绘制拟合曲线和原始散点图做直观判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:45:04