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

为何Numpy polyfit线性拟合斜率与Excel线性趋势线结果一致?

Numpy polyfit线性拟合与Excel线性趋势线一致的原因及疑问解答

为什么线性拟合结果一致?

  • 核心逻辑完全匹配:np.polyfit(order=1)和Excel的线性趋势线,都采用最小二乘法拟合一元线性模型 y = ax + b,目标都是让所有数据点到拟合直线的垂直距离平方和最小,算法底层逻辑完全相同。
  • 输入变量对齐:你的代码用data.index.values作为x轴数据,也就是从0开始的连续整数序列[0,1,2,...,11],这和Excel默认将数据的行号作为x轴(未指定自定义x值时)的处理逻辑完全一致。输入变量相同、算法相同,拟合结果自然一致。

为什么和Excel多项式趋势线斜率不同?

这是因为两者拟合的模型完全不同:

  • 你用order=1做的是线性拟合,得到的是直线的斜率,对应模型y = ax + b里的a。
  • Excel的多项式趋势线(比如2阶)是拟合高阶曲线模型,比如y = ax² + bx + c,这里的"斜率"其实是一阶项系数b,但整个模型是曲线,和线性模型的直线斜率不是同一个概念。模型维度不同,结果必然有差异。

是否存在操作错误?

从代码逻辑看没有错误:

  • 你正确用np.polyfit对索引(连续整数x)和Score值(y)做了线性拟合,当order=1时,coeffs的结果是[斜率, 截距],你提取的coeffs[-2]就是斜率(也可以直接取coeffs[0],结果一致)。
  • 如果要和Excel多项式趋势线对比,只需要把order参数改成对应阶数即可。比如要匹配Excel的2阶多项式趋势线,调用trendline(df['Score'], order=2),此时coeffs[-2]就是一阶项系数,和Excel多项式趋势线的一阶系数会一致。

示例代码(拟合2阶多项式):

# 拟合2阶多项式,对应Excel的2阶多项式趋势线
slope_2nd = trendline(df['Score'], order=2)
print(slope_2nd)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:11