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

如何在Python中固定Numpy多项式回归的系数?

固定零阶系数的线性回归实现(仅用标准Python库)

完全可以通过NumPy自带的工具实现,无需额外第三方库。核心思路是将固定截距的问题转化为无截距的线性回归:

你的目标模型是 Velocity = m*Time + 2.24,等价于 Velocity - 2.24 = m*Time。只需对调整后的因变量(Velocity - 2.24)和自变量Time做无截距拟合,即可得到斜率m。

方法1:用numpy.linalg.lstsq直接求解(推荐)

这是最直观且可靠的方式,手动构造线性方程组求解最小二乘解:

import numpy as np
import pandas as pd

# 读取数据(假设df是你的DataFrame)
x = df['Time'].values
y = df['Velocity'].values

# 固定零阶系数q=2.24,调整因变量
y_adj = y - 2.24

# 构造自变量矩阵(仅包含Time的列,无常数项)
X = x.reshape(-1, 1)

# 最小二乘求解斜率m
m, _, _, _ = np.linalg.lstsq(X, y_adj, rcond=None)
m = m[0]

# 最终模型参数
print(f"斜率m: {round(m, 4)}, 固定截距q: 2.24")

方法2:基于numpy.polynomial.Polynomial.fit的适配

如果想继续使用你熟悉的Polynomial.fit,可以通过调整目标变量后拟合,再提取原始域的斜率:

import numpy as np
import pandas as pd

x = df['Time'].values
y = df['Velocity'].values

# 调整因变量,抵消固定截距
y_adj = y - 2.24

# 拟合调整后的线性模型
lin_reg_adj = np.polynomial.polynomial.Polynomial.fit(x, y_adj, 1)
# 转换为原始数据域的系数(避免Polynomial.fit自动缩放带来的系数偏差)
original_coefs = lin_reg_adj.convert().coef

# 提取斜率m(零阶系数被我们的调整抵消,无需关注)
m = original_coefs[1]

print(f"斜率m: {round(m, 4)}, 固定截距q: 2.24")

两种方法都仅依赖Python标准库中的NumPy和你已在使用的Pandas,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:01:35