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

多项式回归线无法显示求助:基于抛物线拟合优化回归模型

多项式回归拟合线不显示及R²值偏低问题解决

一、拟合回归线不显示的原因及修复

  • 核心问题在x_line = arange(min(x), max(x), 1)这行代码:你的x变量是小数(如0.35、0.455),步长设为1时,arange生成的数组是空的(因为x的取值区间远小于1),自然画不出拟合线。
  • 修复方案:
    • 把步长改成极小值(如0.01);
    • 更推荐用linspace生成均匀采样点,确保覆盖x的全部取值范围。

二、R²值偏低的可能原因及优化方向

  • 拟合初始值问题:curve_fit默认初始参数为1,若与数据最优解差距大,会导致拟合结果偏离。可手动指定初始参数p0,引导算法收敛到更优解。
  • 特征未归一化:若x和y的取值范围差异较大,先对x做标准化/归一化,能提升拟合稳定性。
  • 模型复杂度不足:可尝试三次多项式,或检查是否遗漏其他关联特征,增强模型解释力。
  • 评估方式验证:用sklearn.metrics.r2_score计算真实值与拟合值的R²,确保评估逻辑正确。

修改后的完整代码

from numpy import linspace
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score

# 定义二次多项式模型
def objective(x, a, b, c):
    return a * x + b * x**2 + c
 
# 加载数据集
data = abalone_df.values

# 选择输入输出变量
x, y = data[:, 1], data[:, 4]

# 曲线拟合,指定初始参数引导收敛
popt, _ = curve_fit(objective, x, y, p0=[0.5, 0.5, 0.1])
a, b, c = popt
print(f"参数值:a={a:.5f}, b={b:.5f}, c={c:.5f}")
print(f'y = {a:.5f} * x + {b:.5f} * x^2 + {c:.5f}')

# 计算并输出R²值
y_pred = objective(x, a, b, c)
print(f"R²值:{r2_score(y, y_pred):.5f}")

# 绘制可视化图
plt.scatter(x, y, alpha=0.3, label='原始数据')
# 生成100个均匀采样点,确保拟合线完整显示
x_line = linspace(min(x), max(x), 100)
y_line = objective(x_line, a, b, c)
plt.plot(x_line, y_line, 'r-', label='拟合曲线')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

内容的提问来源于stack exchange,提问作者João Ribeiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:33:29