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

梯度下降代码运行报TypeError列表无法拼接整型错误如何解决

错误原因排查

1. 变量被意外覆盖

你在遍历x的第一个循环里错误加入了y = []语句,直接将传入的带数据的y变量清空为了空列表,会导致后续取y[num]时报索引异常。

2. 输入数据结构未正确处理

你的输入x、y都是嵌套列表,每个元素是单元素列表(比如x[0] = [0.18]),你遍历原x得到的xi是列表类型而非数值,执行xi * m + c时,列表和整数运算直接触发了你看到的类型错误。你定义了x_new变量但完全没有使用,写的展平逻辑完全没有生效。

3. 梯度计算逻辑位置错误

你把平均梯度计算的代码放在了遍历样本的循环内部,相当于每处理一个样本就更新一次平均梯度,不符合批量梯度下降的逻辑,会导致计算结果错误。

修正后代码

def gradient_descent(x, y, m, c, epochs, L=0.001):
    # 先展平嵌套的输入数据为一维数值列表
    x_flat = [elem[0] for elem in x]
    y_flat = [elem[0] for elem in y]
    n = len(x_flat)
    for i in range(epochs):
        dm_total = 0
        dc_total = 0
        # 遍历所有样本累加梯度
        for xi, yi in zip(x_flat, y_flat):
            yi_pred = xi * m + c
            dm_total += xi * (yi_pred - yi)
            dc_total += (yi_pred - yi)
        # 所有样本遍历完成后计算平均梯度再更新参数
        m = m - L * (dm_total / n)
        c = c - L * (dc_total / n)
    return m,c

测试代码保持不变即可正常运行:

x = [[0.18], [1.0], [0.92], [0.07], [0.85], [0.99], [0.87]]
y = [[109.85], [155.72], [137.66], [76.17], [139.75], [162.6], [151.77]]
m = 0
c = 0
epochs = 200
print(gradient_descent(x,y,m,c,epochs))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:36:04