首页 / 基础与评估 / Logistic 回归

Logistic 回归:把直线卷成 S 形

线性回归输出一个任意大小的数,分类器要的是 0 到 1 之间的概率。 中间加一层 sigmoid 把整条直线压成 S 形,再用交叉熵当尺子、梯度下降当脚步, 一步步把决策边界推到最优。

决策边界与预测概率
背景深浅 = 模型认为"属于类别 B"的概率;实线是当前阈值下的决策边界, 线上方的点被判为 B。
损失怎么降下来
S 形映射:z → 概率

                
              
上面①段的参数跟着滑杆实时变;②段是同一个模型的 sklearn 写法。

① 先算一个分数

和线性回归一样,先给每个特征一个权重,加总:

② 用 sigmoid 压成概率

是任意实数,sigmoid 把它压进 (0, 1):

时正好是 0.5; 趋近 1, 趋近 0。 它还是单调的——所以"用 排序" 和"用概率排序"是一回事。

③ 用交叉熵当尺子

预测概率 与真实标签 的差距:

判对了还得罚(只是罚得少),所以模型会被推着"更自信一点"。 这个损失函数对 是凸的, 没有局部最优——梯度下降走到哪停,都是同一个最优解。

④ 梯度下降

对 求偏导,形式意外地干净:

就是"预测减真实"再乘特征值。所有样本都参与一次更新,叫批量梯度下降。

为什么叫"回归"却是分类器? 它回归的是对数几率 , 这条式子右边就是一条直线——所以 Logistic 回归本质上仍是线性的, 决策边界永远是一条直线。切到「月牙」数据集,把参数调到天上去你也分不开它。
1. 为什么不能直接用线性回归做分类,非要套一层 sigmoid?
线性回归输出可能是 −3 或 17,没法当概率用;而且它对离群点极度敏感—— 一个很远的正样本会把整条直线拽过去,原本判对的样本反而判错了。 sigmoid 把输出压进 (0,1),配合交叉熵,模型就只在"还不够确定"的地方用力。
2. 切到「线性可分」数据集训练,为什么损失一直在降、权重一直在涨,永远停不下来?
因为这个问题没有最优解:数据完全分开时,把权重整体放大 倍,所有样本的 都变大,损失就继续下降。 下确界是 0,但取不到,只能无限逼近——代价是权重趋于无穷、模型变得极度自信且脆弱。 这正是正则化要解决的问题:给"权重太大"本身加罚。
3. 把判定阈值从 0.5 调到 0.3,准确率为啥可能下降,但医生反而更愿意用?
阈值调低 ⇒ 更多样本被判为正例 ⇒ 召回率上升、精确率下降。 在癌症筛查里,漏掉一个真患者(假阴性)的代价,远高于让一个健康人多做一次检查(假阳性), 所以宁可牺牲一点准确率也要把召回率拉高。 准确率其实把这两类错误的代价当成了相等的——这在现实里很少成立。 (这一页的乳腺癌数据集就是很好的试验场:把阈值拉到 0.2 看召回率怎么变。)
4. 为什么这个页面的坐标都标着"已标准化"?不标准化会怎样?
乳腺癌两个特征的量纲差了 500 倍(最大周长 33.6,最大凹点数 0.066)。 不做标准化时,损失曲面是个极扁的峡谷,梯度下降要么在陡的方向来回震荡, 要么在平的方向几乎不动,学习率极难选。 我们开发时真的踩过这个坑:一开始只做了"同尺度缩放",结果小量纲特征被压成 0.005 量级, 模型等于只用了一个特征,准确率从 94% 掉到 91.9%——是对拍脚本把它揪出来的。