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

如何从numpy Polynomial.fit()获取可移植的正确多项式系数?

问题解决:获取numpy多项式拟合的标准基系数

核心原因是numpy.polynomial.Polynomial.fit()为了避免高阶多项式拟合的数值不稳定,会自动对输入变量x做缩放平移变换(将x映射到[-1,1]区间),因此直接从拟合结果中提取的系数是对应变换后变量的,而非原始电压值x的系数。必须先转换回标准基多项式,才能得到可直接用于原始x计算的系数。

正确步骤与代码修正

import pandas as pd
from numpy.polynomial import Polynomial as P

df = pd.read_csv('data.csv')
x = df.voltage
y = df.percentage

# 拟合8阶多项式(内部已做变量变换)
p_fitted = P.fit(x, y, 8)

# 转换为标准基多项式(对应原始电压x的多项式)
p_standard = p_fitted.convert()

# 获取x^0到x^8的系数,顺序为[常数项, x^1项, x^2项, ..., x^8项]
correct_coefficients = p_standard.coef

def percentage(voltage):
    total = 0.0
    for power, coef in enumerate(correct_coefficients):
        total += coef * (voltage ** power)
    # 限制结果在0-100区间内
    return max(0.0, min(100.0, total))

# 验证结果一致性
print(p_fitted(3.64))       # 预期输出49.139左右
print(percentage(3.64))     # 现在结果与上方完全一致

关键细节说明

  1. 变量变换的影响:P.fit()生成的多项式是基于变换后的变量x' = (x - x_mean)/x_scale的,直接用这些系数代入原始x计算会完全偏离正确结果。
  2. convert()方法的作用:将变换后的多项式重新转换为原始x的标准基多项式,此时coef属性就是严格对应x^0到x^8的系数,顺序无需反转。
  3. 结果验证:用p_standard(voltage)直接计算,会和你自己实现的percentage()函数结果完全一致,证明系数正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:20:20