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

线性回归Python代码核心计算正常,需完成剩余功能开发与调试

完成线性回归剩余功能的实现与调试

看起来你已经搞定了线性回归里最关键的求和环节,接下来咱们把剩下的计算逻辑补上,让整个分析流程完整跑起来。先给你补上完整的代码,再一步步解释改动点:

from __future__ import division
import math  # 计算相关系数需要用到平方根

data = [[0.0,0.0], [1.0,2.0], [2.0,4.0]] 
n = float(len(data)) 

sumx = 0.0 
sumy = 0.0 
sumxsquared = 0.0 
sumysquared = 0.0  # 新增:计算相关系数需要y的平方和
sumxy = 0.0 
rcoeff = 0.0 
m = 0.0  # 斜率
b = 0.0  # 截距

# 遍历数据计算各项求和值
i = 0
while i < n:
    x = data[i][0]
    y = data[i][1]
    sumx += x
    sumxsquared += x**2.0
    sumysquared += y**2.0  # 新增:累加y的平方
    sumxy += x*y
    sumy += y
    i += 1

# 打印基础求和结果(保留你原来的输出)
print(f"数据点数量n: {n}")
print(f"total x: {sumx}")
print(f"total y: {sumy}")
print(f"total x²: {sumxsquared}")
print(f"total y²: {sumysquared}")
print(f"total xy: {sumxy}")

# 计算斜率m - 注意处理分母为0的情况(避免除以0错误)
denominator_m = n * sumxsquared - sumx**2
if denominator_m == 0:
    print("警告:分母为0,无法计算斜率,数据可能存在共线性问题")
else:
    m = (n * sumxy - sumx * sumy) / denominator_m
    # 计算截距b
    b = (sumy - m * sumx) / n
    # 计算相关系数r
    denominator_r = math.sqrt( (n*sumxsquared - sumx**2) * (n*sumysquared - sumy**2) )
    if denominator_r == 0:
        rcoeff = 0.0
    else:
        rcoeff = (n * sumxy - sumx * sumy) / denominator_r
    # 计算决定系数r²(更常用的拟合度指标)
    r_squared = rcoeff ** 2

    # 打印回归结果
    print("\n线性回归结果:")
    print(f"斜率m: {m:.4f}")
    print(f"截距b: {b:.4f}")
    print(f"相关系数r: {rcoeff:.4f}")
    print(f"决定系数r²: {r_squared:.4f}")
    print(f"回归方程:y = {m:.4f}x + {b:.4f}")

    # 示例:用回归方程预测x=3.0时的y值
    x_pred = 3.0
    y_pred = m * x_pred + b
    print(f"\n预测x={x_pred}时,y的预测值为:{y_pred:.4f}")

关键改动与说明:

  • 新增sumysquared变量:计算相关系数需要用到y的平方和,所以在循环里补上了累加逻辑。
  • 导入math模块:计算相关系数时需要平方根函数sqrt()。
  • 斜率与截距的计算:严格按照线性回归的最小二乘公式实现,同时加了分母为0的判断,避免程序崩溃(比如所有x值都相同的极端情况)。
  • 相关系数与决定系数:相关系数r衡量变量的线性相关程度,r²(决定系数)更直观,代表模型解释数据变异的比例。
  • 结果可视化与预测示例:添加了回归方程打印和预测功能,让你能直接看到模型的实际作用。

调试注意点:

  • 如果运行时出现ZeroDivisionError,检查你的数据是不是所有x值都相同(比如所有数据点的x都是1.0),这种情况下无法计算斜率,需要检查数据合理性。
  • 对于更复杂的数据集,你可以把data换成自己的实际数据,代码逻辑完全通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:07:31