逻辑回归代价函数实现报错,请求排查函数正确性问题
逻辑回归代价函数的错误分析与修正
代码中的核心错误
- 循环缩进错误:外层
for i in range(m):仅执行了z_wb = 0,后续的特征遍历、z值计算、损失计算都不在样本循环范围内,导致代码只会处理最后一个样本,而非全部m个样本。 - 偏置b重复累加:在每个特征
j的循环内都执行z_wb += b,正确逻辑是所有特征加权求和完成后,仅添加一次偏置b。 - 代价计算位置错误:
total_cost = (1/m)*loss_sum被放在内层循环中,每次特征遍历都会重复计算平均代价,正确位置应该是所有样本损失累加完成后再计算平均。
修正后的代码
def compute_cost(X, y, w, b, lambda_= 1): """ 计算所有样本的代价 参数: X : (ndarray 形状 (m,n)) 数据,m个样本,n个特征 y : (array_like 形状 (m,)) 目标值 w : (array_like 形状 (n,)) 模型的参数值 b : 标量,模型的偏置参数值 lambda_: 未使用的占位符 返回: total_cost: (标量) 代价 """ m, n = X.shape loss_sum = 0 for i in range(m): z_wb = 0 # 遍历所有特征计算加权和 for j in range(n): z_wb += w[j] * X[i][j] # 仅添加一次偏置项 z_wb += b f_wb = sigmoid(z_wb) # 计算单个样本的损失 loss = -y[i] * np.log(f_wb) - (1 - y[i]) * np.log(1 - f_wb) loss_sum += loss # 计算所有样本的平均代价 total_cost = (1/m) * loss_sum return total_cost
内容的提问来源于stack exchange,提问作者Benjamin Gardner
相关产品推荐
相关产品推荐

