如何在Python中调整直线截距使其经过指定数据点(最低点)
解决回归线垂直平移至经过最低偏移点的问题
要实现保持回归线斜率不变,垂直平移后经过数据集中相对于原回归线最靠下的点(即残差最小的点),可以通过计算每个数据点的残差确定平移量,具体步骤及代码如下:
实现步骤
- 计算原回归线对每个x的预测值
- 计算每个数据点实际y值与预测值的残差(垂直方向偏移量)
- 找到最小残差值,用它调整原回归线的截距,得到平移后的直线
修改后完整代码
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
相关产品推荐
相关产品推荐

