带L2正则化的Logistic Regression实现成本异常问题咨询
代码存在多处错误,当前输出不符合正常梯度下降的预期,问题点如下:
- 变量名不统一
函数形参定义为xtr、ytr,但函数内部计算样本数m和特征数n时调用了全局变量xtrain,如果传参和全局变量的维度不一致,会直接导致梯度计算逻辑错误,需要把函数内所有xtrain、ytrain替换为形参xtr、ytr。 - L2正则的成本公式错误
L2正则的惩罚项应为(lamda/(2*m)) * np.sum(np.square(W)),你当前写的lamda*np.sum(W)是错误的:既没有对W取平方,也没有匹配缩放系数,完全不符合L2正则的设计逻辑。 - 成本和梯度的正则项不匹配
你梯度计算里的正则项是(lamda/(2*m))*W,和成本里的正则项完全不对应,导致梯度下降的优化方向和成本下降的方向不一致,这是首次迭代成本直接飙升的核心原因。 - 特征未做归一化(潜在问题)
如果输入特征没有做标准化/归一化,不同特征的数值范围差异过大,即使学习率看起来不大,也可能出现第一次迭代步长太长、成本跳升的情况。
修复方案
- 统一函数内的变量名,全部使用传入的
xtr、ytr计算维度 - 修改成本计算行的正则部分:
cost=-(1/m)*np.sum(ytr.T*np.log(a)+(1-ytr.T)*np.log(1-a)) + (lamda/(2*m))*np.sum(np.square(W)) - 确认输入特征已做归一化,如果修复后还是出现首次迭代成本上升,可把学习率下调至
0.0001再测试。
内容的提问来源于stack exchange,提问作者nooona alnon
相关产品推荐
相关产品推荐

