梯度下降代码运行报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
相关产品推荐
相关产品推荐

