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

线性回归寻找最小MSE:代码逻辑错误排查

线性回归遍历寻优代码问题排查

核心错误分析

  • 无效循环且覆盖变量:第一个for y in x:循环完全多余,每次迭代都重复计算ypred = a*x+b,还覆盖了原本存储真实标签的y变量(后续靠ytrue=data.y规避了直接错误,但这个循环毫无意义,应直接删除)。
  • 遍历a的逻辑彻底错误:
    1. 错误将真实标签ytrue赋值为候选a的数值(ytrue = a-0.1*(i+1)),混淆了模型参数与真实数据的边界,ytrue必须始终是原始的data.y。
    2. 遍历过程中未根据当前候选a重新计算预测值ypred,全程使用初始a=10时的结果,导致MSE计算完全偏离目标。
    3. 错误将候选a的值存入tmp_a(因误把ytrue当成a的候选值),最终输出的tmp_a根本不是最优斜率参数。

修正后的单参数(a)优化代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = pd.read_csv('dataset.csv')
x = data.x
ytrue = data.y

# 可视化原始数据分布
plt.scatter(x, ytrue)
plt.show()

# 初始化最优参数与最小MSE
min_mse = np.infty 
best_a = 0
fixed_b = 0  # 暂时固定b为0

# 遍历a从10递减到0,步长0.1(共101次循环,包含0)
for i in range(101):
    current_a = 10 - 0.1 * i
    ypred = current_a * x + fixed_b
    current_mse = np.square(ytrue - ypred).mean()
    if current_mse < min_mse:
        min_mse = current_mse
        best_a = current_a

print(f"最优a值: {best_a}, 对应MSE: {min_mse}")

双参数(a+b)优化实现

若需同时寻找最优的a和b,可通过嵌套循环遍历两个参数的候选范围(示例中b的范围设为-2到2,步长0.1,可根据数据调整):

import pandas as pd
import numpy as np

data = pd.read_csv('dataset.csv')
x = data.x
ytrue = data.y

min_mse = np.infty 
best_a = 0
best_b = 0

# 遍历a的候选值
for i in range(101):
    current_a = 10 - 0.1 * i
    # 遍历b的候选值
    for j in range(41):
        current_b = -2 + 0.1 * j
        ypred = current_a * x + current_b
        current_mse = np.square(ytrue - ypred).mean()
        if current_mse < min_mse:
            min_mse = current_mse
            best_a = current_a
            best_b = current_b

print(f"最优a值: {best_a}, 最优b值: {best_b}, 对应MSE: {min_mse}")

额外建议

这种暴力遍历的寻优方法效率极低,实际项目中推荐直接使用np.linalg.lstsq求解最小二乘解,或者使用scikit-learn的LinearRegression模型,能快速得到最优参数,无需手动遍历。

内容的提问来源于stack exchange,提问作者Aaron Beattie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:50:27