坐标轴反转后最佳拟合直线参数不符合预期的原因咨询
我绘制了一组数据的散点图并叠加了最佳拟合直线。因数据特性,将y轴数据移至x轴(反转坐标轴)更符合概念逻辑。设原最佳拟合直线的截距为a1、斜率为b1,反转后重新拟合的截距为a2、斜率为b2。由于原斜率b1接近1,我预期a2近似等于-a1,且b1与1的差值和b2与1的差值符号近似相反。
最初我使用numpy.polyfit(deg=1)进行拟合(已了解该方法已过时),结果如下:
before axes inversion np.polyfit gave intercept of 0.016 and slope of 1.005 after axes inversion np.polyfit gave intercept of 0.002 and slope of 0.75
新拟合的截距和斜率不符合预期。随后我改用stats.linregress,结果一致:
before axes inversion stats.linregress gave intercept of 0.016 and slope of 1.005 after axes inversion stats.linregress gave intercept of 0.002 and slope of 0.75
两种算法结果一致,说明问题出在我的认知上。我推测可能的原因:1)对坐标轴反转的对称性假设错误;2)需为拟合算法添加额外参数;3)其他未知因素。请问实际原因是什么?
实际原因
核心问题在于混淆了“坐标轴反转后取原直线的反函数”和“交换x/y后重新做线性回归”这两个完全不同的操作。
线性回归的本质是最小化预测值与观测值的垂直距离平方和:
- 原拟合是最小化 $\sum(y_i - (a1 + b1x_i))^2$
- 交换x/y后重新拟合是最小化 $\sum(x_i - (a2 + b2y_i))^2$
这和求原直线的反函数(即 $x = (-a1/b1) + (1/b1)y$)完全不是一回事,哪怕原斜率接近1也不例外。
只有当数据点完美落在原直线上时,交换x/y后的拟合结果才会和原直线的反函数一致。但实际数据存在噪声,两种拟合的优化目标不同,结果自然会偏离预期。
比如原拟合公式为 $y = 0.016 + 1.005x$,它的反函数是 $x ≈ -0.0159 + 0.995y$,但交换x/y后的线性回归是找一条直线让x的预测值与实际x的垂直距离平方和最小,优化目标的差异直接导致了a2、b2和反函数参数的偏差。
另外,你假设的“对称性”仅在无噪声的理想数据下成立,实际数据的噪声会打破这种对称性,进一步导致拟合结果偏离预期。
内容的提问来源于stack exchange,提问作者sil

