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

如何在Python中调整直线截距使其经过指定数据点(最低点)

解决回归线垂直平移至经过最低偏移点的问题

要实现保持回归线斜率不变,垂直平移后经过数据集中相对于原回归线最靠下的点(即残差最小的点),可以通过计算每个数据点的残差确定平移量,具体步骤及代码如下:

实现步骤

  1. 计算原回归线对每个x的预测值
  2. 计算每个数据点实际y值与预测值的残差(垂直方向偏移量)
  3. 找到最小残差值,用它调整原回归线的截距,得到平移后的直线

修改后完整代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import linregress

x = np.arange(0,10,2)
y = np.random.random(5)

res = linregress(x,y)

# 计算原回归线的预测值
y_pred = res.slope * x + res.intercept
# 找到最靠下的点相对于原直线的残差
min_residual = np.min(y - y_pred)
# 计算平移后的新截距
new_intercept = res.intercept + min_residual

plt.figure(figsize=(9,4),dpi=450)
plt.plot(x, y, 'o', label='original data')
plt.plot(x, res.intercept + res.slope*x, 'r', label='fitted line')
# 绘制平移后的直线
plt.plot(x, new_intercept + res.slope*x, 'g', label='shifted line')

plt.legend()
plt.show()

原理说明

垂直平移回归线时斜率res.slope保持不变,仅调整截距。原直线方程为y = m*x + b,平移后直线为y = m*x + (b + delta):

  • 残差y_i - (m*x_i + b)表示点在原直线上方(正值)或下方(负值)的垂直距离
  • 最小残差值就是最靠下的点与原直线的偏移量,将其加到原截距上,就能让平移后的直线刚好经过该点

原回归线图像:
原回归线图像

手动调整后的直线效果(与代码实现一致):
平移后的直线图像

内容的提问来源于stack exchange,提问作者J.D.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:57:11