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

LogisticRegression训练异常:数据放大100倍后预测正常的原因探究

LogisticRegression训练数据缩放前后效果差异的原因分析

问题情况

使用chip_test.csv数据集(test1、test2为特征,pass为标签:0=未通过,1=通过)训练LogisticRegression模型时:

  • 原始数据训练:预测结果全为0,准确率仅66.67%
  • 将特征放大100倍后训练:预测完全正确,准确率100%

原始数据集

test1,test2,pass
0.051267,0.69956,0
-0.09274,0.68494,0
-0.21371,0.69225,0
-0.375,0.50219,0
0.18376,0.93348,1
0.22408,0.77997,1
0.29896,61.915,1
-0.51325,0.46564,0
-0.52477,0.2098,0

原始训练输出

pre: [0 0 0 0 0 0 0 0 0]
accuracy 0.6666666666666666
coef_ [[0.8464159  0.36835743]]
intercept_ [-0.84822465]

放大100倍后的数据集

test1,test2,pass
5.1267,69.956,0
-9.274,68.494,0
18.376,93.348,1
22.408,77.997,1
29.896,61.915,1
-21.371,69.225,0
-37.5,50.219,0
-51.325,46.564,0
-52.477,20.98,0

放大后训练输出

pre: [0 0 1 1 1 0 0 0 0]
accuracy 1.0
coef_ [[0.40853988 0.15604305]]
intercept_ [-16.80311472]

核心原因分析

1. L2正则化的相对权重问题

sklearn的LogisticRegression默认开启L2正则化(penalty='l2'),正则项会限制模型系数的大小,公式为:
$$Loss = 对数损失 + C^{-1} * ||w||_2^2$$
(其中$C$是正则强度的倒数,默认$C=1.0$)

  • 原始数据特征值极小(test1在-0.50.3之间,test2在0.20.9之间),此时正则项对系数的惩罚权重远大于特征本身的贡献,导致模型学到的系数被严重压制。最终线性组合$w_1x_1 + w_2x_2 + b$的结果全部为负,经过sigmoid函数后输出小于0.5,因此预测全为0。
  • 特征放大100倍后,特征值量级提升,正则项的相对影响被削弱,模型可以学到足够大的系数,让正样本的线性组合结果为正,从而正确区分两类。

2. 梯度更新的效率问题

LogisticRegression使用梯度下降类算法优化损失函数,梯度的计算和特征值直接相关:
$$\nabla_w Loss = X^T(\sigma(Xw + b) - y) + C^{-1}w$$

  • 原始数据特征值小,导致梯度的绝对值很小,模型在默认迭代次数(max_iter=100)内无法完成有效更新,只能收敛到一个偏向多数类(0类占66.6%)的次优解。
  • 放大特征后,梯度的有效步长变大,模型能在有限迭代次数内收敛到可以正确区分两类的最优参数。

3. 类别不平衡的间接影响

原始数据中0类样本占比更高(6/9),当模型因正则化和小梯度无法学到有效区分边界时,会倾向于选择“全预测0”这种简单策略——毕竟这样已经能获得不低的准确率(66.67%)。而放大数据后,模型具备了学习区分边界的能力,就不会再依赖这种偷懒的策略。

验证与解决思路

  • 验证:尝试关闭正则化(penalty='none'),原始数据训练也能得到正确结果(但不推荐,正则化是防止过拟合的重要手段)。
  • 标准解决方案:对特征做标准化/归一化(比如StandardScaler或MinMaxScaler),这是训练LogisticRegression等线性模型的常规操作,比手动放大数据更科学。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:05:53