为新数据集创建Gradient Descent模型时出现错误求助
梯度下降模型报错问题排查
我是机器学习(ML)新手,此前曾使用其他数据集练习创建梯度下降模型,本次尝试使用随机数据集进一步学习梯度下降,但在创建模型时出现错误。
相关代码如下:
import pandas as pd file = pd.read_excel('slr06.xlsx') # Data x = pd.DataFrame(file, columns=['X']) y = pd.DataFrame(file, columns=['Y']) # Parameters w = 0.0 b = 0.0 # HyperParameters learning_rate = 0.01 # Creating Gradient Descent def descend(x, y, w, b, learning_rate): dl_dw = 0.0 dl_db = 0.0 n = x.shape[0] # loss = (y-yhat)**2 for xi, yi in zip(x, y): dl_dw = -2*xi*(yi-(w*xi+b)) dl_db = -2*(yi-(w*xi+b)) # Make an Update w = w - learning_rate*(1/n)*dl_dw b = b - learning_rate*(1/n)*dl_db return w, b # Iteratively make updates for epoch in range(500): w, b = descend(x, y, w, b, learning_rate) yhat = w * x + b loss = np.divide(np.sum((y - yhat)**2, axis=0), x.shape[0]) print(f"{epoch} loss is {loss} parameters w: {w} | b:{b}")
数据与错误说明
- 数据集:包含
X和Y两列的表格数据 - 错误:运行代码时出现类型不匹配错误,无法对DataFrame对象与数值进行运算,同时存在
np未定义的NameError
问题根源
- 遍历对象错误:
zip(x, y)遍历的是DataFrame的列名(字符串类型),而非每行的数值,导致后续计算出现类型不兼容问题 - 缺失numpy导入:代码中使用
np.divide但未导入numpy库,引发NameError - 梯度计算错误:循环中直接覆盖
dl_dw和dl_db,未累加所有样本的梯度,导致梯度值仅保留最后一个样本的计算结果
修复后的代码
import pandas as pd import numpy as np # 新增numpy库导入 file = pd.read_excel('slr06.xlsx') # 将DataFrame列转为numpy数组,便于逐元素访问 x = file['X'].values y = file['Y'].values # 参数初始化 w = 0.0 b = 0.0 # 超参数 learning_rate = 0.01 # 梯度下降函数 def descend(x, y, w, b, learning_rate): dl_dw = 0.0 dl_db = 0.0 n = x.shape[0] # 遍历所有样本,累加梯度 for xi, yi in zip(x, y): yhat = w * xi + b dl_dw += -2 * xi * (yi - yhat) dl_db += -2 * (yi - yhat) # 更新参数 w = w - learning_rate * (dl_dw / n) b = b - learning_rate * (dl_db / n) return w, b # 迭代更新参数 for epoch in range(500): w, b = descend(x, y, w, b, learning_rate) yhat = w * x + b loss = np.mean((y - yhat)**2) # 用np.mean简化损失计算 print(f"{epoch} loss is {loss:.4f} parameters w: {w:.4f} | b:{b:.4f}")
关键修复点
- 将DataFrame列转为numpy数组(
values属性),确保遍历的是数值而非列名 - 补充numpy库导入,解决
np未定义问题 - 循环中使用
+=累加梯度,保证梯度是所有样本的平均值 - 用
np.mean替代手动计算均值,代码更简洁易读
内容的提问来源于stack exchange,提问作者Syed Mohmmad Ali Jafri
相关产品推荐
相关产品推荐

