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

Python中np.polyfit拟合异常的原因探究

多项式拟合方向问题的原因分析

问题描述

我有一组数据集(对应下图蓝色散点),用np.polyfit生成的橙色趋势线,看起来需要沿Y轴翻转并顺时针旋转90度才能匹配数据分布。但将数据集旋转至凹口朝上时,polyfit的拟合结果完全正常,请问这是什么原因?

无旋转时的拟合结果:
无旋转时的拟合结果

数据集旋转-90度后的正确拟合结果:
旋转-90度后的拟合结果

数据集旋转90度后的正确拟合结果:
旋转90度后的拟合结果

生成图表的代码如下:

import matplotlib.pyplot as plt
import numpy as np

plt.close

fig, ax = plt.subplots(1, 1, figsize=(10, 10))

if (1):
    f = rotate_data_List([dataV[0]],-90)
else:
    f = dataV

x = f[0][:,0] 
y = f[0][:,1] 
ax.plot( x , y , 'o' )

coeff = np.polyfit(x,y,2)
z = np.poly1d(coeff)
yn = z(x)

ax.plot( x,yn)

plt.show()

原因分析

核心问题出在多项式拟合的定义上:np.polyfit(x, y, 2)是固定拟合形如y = ax² + bx + c的二次曲线,也就是默认把x当自变量、y当因变量,拟合的是y随x变化的二次趋势。

看你无旋转的原始数据,它的分布是x随y变化呈现二次关系(相当于竖起来的抛物线,凹口朝左/右),但你依然用y对x做拟合,相当于强行把竖抛物线按横抛物线的逻辑去适配,结果自然完全不对。

当你把数据旋转90/-90度后,数据变成了y随x变化的二次关系(凹口朝上/下),这正好匹配np.polyfit(x,y,2)的拟合逻辑,所以结果就正常了。

如果不想旋转数据,你可以反过来用np.polyfit(y, x, 2),拟合x关于y的二次曲线,再生成对应的x值绘制,就能匹配原始数据的分布了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:55:04