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

循环执行线性回归时accuracy列表值全部相同的修复方案咨询

修复循环中线性回归结果重复的问题

看起来你遇到的问题是循环里每个迭代的结果都一模一样,这是因为代码里有几个关键的逻辑错误,我来帮你拆解并修复:

问题根源分析

  • 覆盖原始数据集:循环中直接修改了原始的data变量,导致后续迭代都是基于前一个子集的数据,而非完整的原始数据。
  • 未基于子集提取特征:全局定义的X和y指向的是整个数据集,没有针对每个商品子集重新提取特征与目标变量。
  • 数据集划分逻辑错误:训练/测试集的切片操作是基于全局X,而非当前子集的特征数据,导致每次都用相同的数据计算。
  • 变量名笔误:代码中使用了未定义的owner_cost,应该是real_cost。

修正后的代码

import numpy as np
from sklearn import linear_model

# 获取商品的唯一编码
codes = np.unique(data["cod_id"])
accuracy = []

# 循环遍历每个商品编码
for code in np.nditer(codes):
    # 提取当前商品的子集,注意不要覆盖原始data
    subset_data = data.loc[data["cod_id"] == code]
    # 从子集里提取特征与目标变量(线性回归要求X是二维数组)
    X_sub = subset_data['price'].values.reshape(-1, 1)
    y_sub = subset_data["quantity"]
    
    # 设置判断语句避免空数组,同时按80%训练集、20%测试集划分
    if len(subset_data) <= 2:
        # 数据量太少,直接用整个子集作为训练和测试(或根据需求跳过)
        X_train = X_sub
        y_train = y_sub
        X_test = X_sub
        y_test = y_sub
    else:
        t = int(0.8 * len(subset_data))
        # 基于当前子集划分训练/测试集
        X_train = X_sub[:t]
        y_train = y_sub[:t]
        X_test = X_sub[t:]
        y_test = y_sub[t:]
    
    # 运行线性回归算法
    lr = linear_model.LinearRegression()
    lr.fit(X_train, y_train)
    predicted_test_tr = lr.predict(X_test)
    
    # 计算预测成本与真实成本(X_test是二维数组,需要flatten转为一维)
    pred_cost = (X_test.flatten() * predicted_test_tr).sum()
    real_cost = (X_test.flatten() * y_test.values).sum()
    
    # 计算delta并加入列表(避免除以0的异常)
    if real_cost != 0:
        delta = (pred_cost - real_cost) / real_cost
        accuracy.append(delta)
    else:
        # 处理真实成本为0的特殊情况,可根据需求调整
        accuracy.append(np.nan)

额外说明

  • 线性回归要求输入特征X为二维数组,所以用reshape(-1, 1)将一维的价格数据转换为符合要求的格式。
  • 增加了real_cost != 0的判断,避免出现除以0的运行错误。
  • 循环变量改用code替代i,提升代码可读性。

内容的提问来源于stack exchange,提问作者Alessandro Ceccarelli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:56:14