逻辑回归为什么叫回归,却用来做分类

理解线性分数、Sigmoid、概率和阈值,跑通第一个二分类逻辑回归示例。

学习路线:传统机器学习基础(21~34) · 第 29 课
第 29 课线性分数经过 Sigmoid 曲线转成零到一之间的分类概率。
Learning Path

传统机器学习基础(21~34)

补齐文本分类项目背后的数据处理、算法、评估和模型选择知识。

学完本阶段你能做到:拿到一份结构化表格数据,独立完成清洗、特征工程、建模、评估、模型选择和保存,并用规范流程比较多个算法。

推荐读法:建议系统读。做项目时遇到数据和模型选择问题,也可以按需回查。

查看完整阶段 · 14 篇
Lesson Guide

这一课怎么学

先看目标,再带着问题读正文。读完后用练习确认自己真的理解了。

本节你会学到

  • 说清楚「逻辑回归为什么叫回归,却用来做分类」解决的核心问题
  • 知道它在「传统机器学习基础(21~34)」中的位置
  • 把 分类与回归、机器学习、监督学习 这些关键词联系起来

前置知识

  • 建议先读完上一篇:回归模型怎样评估:MAE、MSE、RMSE 和 R²
  • 能区分输入、输出、数据和模型目标。

概念回顾

  • 【分类与回归】判断邮件是不是垃圾邮件是分类,预测房价是多少是回归。 前面或后面会反复用到它。
  • 【机器学习】机器学习的重点不是手写所有规则,而是准备数据、定义目标,让模型自己找到可复用的模式。 前面或后面会反复用到它。
  • 【监督学习】如果训练数据里有“题目”和“答案”,模型学会以后再给它新题目,它就尝试给出答案。 前面或后面会反复用到它。

常见误区

  • 不要只记定义,要追问它解决了什么问题。
  • 不要把概念孤立背下来,要放回数据到结果的完整链路里。

课后练习

  • 用 3 句话向一个零基础朋友解释「逻辑回归为什么叫回归,却用来做分类」。
  • 打开概念库里的「分类与回归」,补一遍它和本文的关系。
  • 读下一课「KNN 分类:让距离最近的样本帮忙投票」前,先写下你认为它会解决的问题。

自检练习与参考答案

1. 用一句话说清「逻辑回归为什么叫回归,却用来做分类」解决了什么问题。

合格答案不是复述标题,而是说清它在“数据进入模型、模型学习、结果评估或项目落地”中的作用。

2. 这篇文章和上一课或下一课是什么关系?

它应该为下一课「KNN 分类:让距离最近的样本帮忙投票」铺路:读完后要知道下一课为什么自然出现。

下一步建议读「KNN 分类:让距离最近的样本帮忙投票」。

学完线性回归后,很多人第一次看到“逻辑回归”都会困惑:它既然叫回归,为什么常被用来判断“是或否”“会或不会”这类分类问题?

关键在于它并不直接输出类别,而是先输出一个概率。例如“这条短信是垃圾短信的概率为 0.86”,然后我们再根据阈值把概率变成最终类别。

第 29 课视频 · 逻辑回归为什么用来做分类

从线性分数开始

逻辑回归和线性回归一样,先把输入特征做加权求和:

z = wx + b

这个 z 是一个线性分数,可以是任意实数,例如 -4.20.712。但分类概率必须落在 0 到 1 之间,所以它还会经过一个 Sigmoid 函数:

p = 1 / (1 + e^(-z))

Sigmoid 会把很小的分数压到接近 0,把很大的分数压到接近 1。于是 p 就可以理解为“样本属于正类的概率”。

概率如何变成类别

最常见的阈值是 0.5

p >= 0.5  ->  正类(1)
p < 0.5   ->  负类(0)

例如:

  • 垃圾短信概率 0.86,在 0.5 阈值下判为垃圾短信;
  • 用户流失概率 0.22,在 0.5 阈值下判为不流失。

但阈值不是自然规律。信用风控中漏掉高风险用户的代价很大,可以把阈值调低,让模型更积极地提示风险;医学初筛中不希望漏检,也常会优先提高召回率。反过来,误报很昂贵时可以提高阈值。

它和线性回归到底有什么不同

对比项 线性回归 逻辑回归
任务 预测连续数值 预测类别概率
输出范围 任意实数 0 到 1
常见场景 房价、销量、温度 流失、欺诈、垃圾短信
常见评估 MAE、RMSE、R² 精确率、召回率、F1、AUC

两者都包含“线性组合”这一部分,但最后的目标、损失函数和评估方式不同。逻辑回归的“回归”更多是在说它学习一个连续的分数和概率,而最终用途是分类。

用 scikit-learn 训练一个二分类模型

下面以“是否通过考试”为例。输入是复习小时数,标签是是否通过:

import numpy as np
from sklearn.linear_model import LogisticRegression

# 每个样本只有一个特征:复习小时数
X = np.array([[1], [2], [3], [4], [5], [6], [7], [8]])
y = np.array([0, 0, 0, 0, 1, 1, 1, 1])

model = LogisticRegression()
model.fit(X, y)

hours = np.array([[4.5]])
probability = model.predict_proba(hours)[0, 1]
label = model.predict(hours)[0]

print(f"通过概率:{probability:.2%}")
print(f"预测类别:{label}")

predict_proba() 很重要。它返回每个类别的概率,二分类时 [0, 1] 中索引为 1 的位置就是“正类”的概率。predict() 则使用模型默认阈值,直接返回类别标签。

不要只盯着默认阈值

如果你需要自定义阈值,可以先拿到概率,再自行判断:

threshold = 0.35
custom_label = int(probability >= threshold)

不过调阈值之前要先想清楚:误判正类和漏掉正类,哪一种代价更高?然后结合验证集上的混淆矩阵、精确率和召回率做选择。只凭感觉改成 0.3 或 0.8,通常会让模型更难解释。

逻辑回归的优点和局限

逻辑回归训练快、可解释性强,对中小规模的表格数据是很好的基线。它还可以通过权重的正负大致判断特征和正类概率的关系方向。

但它的分类边界本质上是线性的。数据存在复杂的非线性关系时,可能需要构造交互特征,或者尝试 KNN、决策树、随机森林等模型。下一个模型 KNN 就完全不学习一条显式公式,而是让“最近的样本”参与投票。

常见错误

predict() 当成概率

predict() 返回的是最终类别,不是概率。想知道模型有多确信,应该使用 predict_proba()

忽略类别不平衡

如果 99% 的样本都是“正常”,一个永远预测“正常”的模型准确率也可能是 99%。这时要结合精确率、召回率、F1、类别权重和采样策略,而不能只看准确率。

用测试集反复调阈值

测试集是最后一次客观检查的机会。阈值选择应在训练集内部的验证集或交叉验证中完成,否则测试分数会被人为“调高”。

课后练习

把示例中的 hours 改成 [[3.5]][[5.5]][[7.5]],记录每个样本的通过概率。然后分别用 0.50.7 作为阈值,观察最终类别如何变化。

本课总结

  • 逻辑回归是经典的分类模型;
  • 它先计算线性分数,再用 Sigmoid 转成概率;
  • predict_proba() 返回概率,predict() 返回类别;
  • 阈值的选择应由业务代价与分类指标共同决定。

下一课我们学习 KNN 分类:模型不再先学一条公式,而是让距离最近的邻居来投票。

Discussion

留言讨论