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

线性回归:如何计算数据点与预测线的距离并新增Distance列

没问题,我来帮你一步步实现计算数据点到线性回归预测线的距离,并把结果存入Distance新列的需求!

步骤1:准备数据

首先我们先把你提供的样本数据整理成DataFrame(我补全了部分缺失的样本值,你可以根据实际数据调整):

# 构造你的数据样本
data = {
    'Exam Results': [93, 94, 92, 88, 90],
    'Hours Studied': [8.232795, 7.879095, 6.972698, 6.854017, 7.5]
}
df = pd.DataFrame(data)

步骤2:拟合线性回归模型

用sklearn的LinearRegression拟合你的数据:

# 定义特征(X)和目标变量(y)
X = df[['Hours Studied']]
y = df['Exam Results']

# 训练模型
model = LinearRegression()
model.fit(X, y)

步骤3:计算垂直距离到回归线

这里要注意:垂直距离是指数据点到回归线的最短(垂直)距离,和常见的**纵向残差(实际值-预测值)**是不同的。我们用直线距离公式来计算:
对于回归线方程 y = m*x + b,点(x0, y0)到直线的垂直距离公式为:
|m*x0 - y0 + b| / sqrt(m² + 1)

代码实现如下:

# 获取模型的斜率(m)和截距(b)
m = model.coef_[0]
b = model.intercept_

# 计算每个点的垂直距离并存入新列
df['Distance'] = np.abs(m * df['Hours Studied'] - df['Exam Results'] + b) / np.sqrt(m**2 + 1)

如果你其实需要的是纵向残差(也就是预测值和实际值的差的绝对值,很多场景下也会被误称为“距离”),可以用更简单的方式计算:

# 先计算预测值
df['Predicted Exam Results'] = model.predict(X)
# 计算纵向残差
df['Vertical Residual'] = np.abs(df['Exam Results'] - df['Predicted Exam Results'])

步骤4:验证结果(可选)

我们可以用可视化来确认距离计算是否正确:

plt.scatter(df['Hours Studied'], df['Exam Results'], label='Data Points', color='blue')
plt.plot(df['Hours Studied'], model.predict(X), color='red', label='Regression Line')

# 绘制每个点到回归线的垂直距离线
for idx, row in df.iterrows():
    x0 = row['Hours Studied']
    y0 = row['Exam Results']
    # 计算垂直线与回归线的交点
    x_intersect = (x0 + m*(y0 - b)) / (1 + m**2)
    y_intersect = m * x_intersect + b
    plt.plot([x0, x_intersect], [y0, y_intersect], color='gray', linestyle='--')

plt.xlabel('Hours Studied')
plt.ylabel('Exam Results')
plt.legend()
plt.title('Data Points vs Regression Line (with Vertical Distances)')
plt.show()

运行完这些代码后,你的DataFrame就会新增Distance列,里面就是每个数据点到回归线的垂直距离啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:25:53