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

从零实现Logistic regression模型所有预测值均接近0.5问题求助

问题排查结果

核心问题1:train函数存在全局变量硬编码错误

你定义的train函数参数中传入了模型实例net,但函数内部打印参数、更新权重和偏置时,全部硬编码使用了全局实例NN,而非传入的net参数。虽当前代码中你传入的实例恰好是NN可正常运行,但该写法存在极大隐患,若后续更换传入的模型实例会直接导致训练完全失效。

核心问题2:正则化项计算错误

你当前实现的L2正则损失使用numpy.mean(net._weights**2 * net._lam/2),等价于将正则损失除以权重的维度,而非按照常规实现与对数损失保持一致除以样本数量,导致正则项的实际惩罚系数与预期不符,若正则惩罚过强会直接抑制权重更新,最终权重全部趋近于0,模型输出始终接近sigmoid(0)=0.5,无法完成分类。
正确的正则损失计算方式为:

regularization_term = net._lam * numpy.sum(net._weights **2) / (2 * len(p))

其他可能导致问题的原因

  • 特征未标准化:逻辑回归对特征尺度敏感,若输入特征的量纲差异过大,会导致梯度下降收敛速度慢甚至无法收敛到最优解,建议在训练前对输入特征做Z-score标准化处理。
  • 训练参数匹配错误:你代码中调用train函数时传入的epochs参数为100,而你给出的训练输出是1000轮的结果,需确认实际运行时是否正确修改了轮次参数;同时当前学习率0.5可尝试调整到0.1、0.01等不同数值对比收敛效果。
  • 数据集读取错误:代码中存在未定义的变量x_combined,需确认你运行的完整代码是否存在数据集读取错误、标签与特征不匹配的问题,可直接打印读取后的x_logregdata、y_logregdata的形状和部分值校验是否和预期一致。
  • 权重初始化不合理:当前使用numpy.random.rand(n)初始化权重,生成的是0~1区间的均匀分布值,所有初始权重均为正数,建议改用均值为0的正态分布初始化numpy.random.randn(n),加快收敛速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:45:03