逻辑回归:名字像回归,实际却是做分类的

刚开始学机器学习时,我对“逻辑回归”这个名字一直很困惑。

因为前面刚学完线性回归,已经知道“回归”通常是在预测一个连续值,比如房价、气温、销量。结果一看到逻辑回归,发现它居然是拿来做分类的,比如判断一封邮件是不是垃圾邮件、判断用户会不会流失、判断肿瘤是良性还是恶性。

那它到底为什么叫“回归”?

这篇就把这件事讲清楚。


1. 先说结论:逻辑回归是分类算法

逻辑回归最常见的用途,不是预测一个具体数值,而是判断一个样本属于哪一类。

比如:

  • 一封邮件是不是垃圾邮件
  • 一个用户会不会点击广告
  • 一笔交易是不是欺诈
  • 一个学生会不会通过考试

这些问题都有一个共同点:
结果通常只有两种。

比如:

  • 是 / 否
  • 0 / 1
  • 正类 / 负类

这类问题就叫 二分类问题

逻辑回归就是解决这类问题里最经典、最基础的方法之一。


2. 它为什么不能直接用线性回归来做分类

先看一个最简单的例子。

假设我们想根据学生每天学习的时间,预测他能不能通过考试。

数据可能像这样:

学习时长(小时)是否通过考试
10
20
30
41
51
61

这里:

  • 输入是学习时长
  • 输出只有两个值:0 和 1

如果我们硬要用线性回归去做,会发生什么?

线性回归会试图拟合出一条直线,比如:

y=wx+b y = wx + b y=wx+b

然后给出预测值,可能是:

  • 0.2
  • 0.7
  • 1.3
  • -0.4

问题来了:

分类问题需要的是明确的类别,最好落在 0 到 1 之间,而线性回归预测出来的结果可能大于 1,也可能小于 0,这就不太合适了。

更关键的是,分类问题里我们真正关心的不是“一个连续值”,而是:

这个样本属于正类的概率到底有多大。

所以这里就需要一个函数,能把任意实数都压到 0 和 1 之间。

这就是逻辑回归的关键。


3. 逻辑回归真正厉害的地方,在于 Sigmoid 函数

逻辑回归的核心不是“回归”两个字,而是它用了一个叫 Sigmoid 的函数。

公式长这样:

σ(z)=11+e−z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1

第一眼看这个公式,确实容易头大。
但你其实不用一上来就背公式,只需要知道它干了一件非常重要的事:

把任意一个数,映射到 0 到 1 之间。

比如:

  • 当输入很大时,输出接近 1
  • 当输入很小时,输出接近 0
  • 当输入接近 0 时,输出接近 0.5

这就特别适合做分类。

因为我们可以把输出理解成:

样本属于“1”这一类的概率。

比如模型输出:

  • 0.9:很大概率属于 1
  • 0.2:大概率属于 0
  • 0.51:勉强更偏向 1
  • 0.49:勉强更偏向 0

这时候再设一个阈值,比如 0.5,就可以把概率变成类别:

  • 大于等于 0.5,判为 1
  • 小于 0.5,判为 0

这就是逻辑回归做分类的基本思路。


4. 它到底在算什么

逻辑回归本质上还是会先算一个线性结果:

z=wx+b z = wx + b z=wx+b

如果有多个特征,就是:

z=w1x1+w2x2+⋯+b z = w_1 x_1 + w_2 x_2 + \cdots + b z=w1x1+w2x2++b

到这里,其实和线性回归很像。

真正的区别在下一步。
逻辑回归不会直接把这个 zzz 当结果输出,而是会把它送进 Sigmoid 函数:

y^=σ(z) \hat{y} = \sigma(z) y^=σ(z)

最终得到一个 0 到 1 之间的值,作为概率。

所以可以这么理解:

  • 线性部分:负责把输入特征组合起来
  • Sigmoid 部分:负责把结果压成概率

这样一来,逻辑回归就能很自然地处理分类问题了。


5. 一个直观理解:分数越高,越像某一类

你可以把逻辑回归想成一种“打分机制”。

比如判断一个用户会不会买某个商品,模型会综合很多信息:

  • 浏览时长
  • 点击次数
  • 历史购买记录
  • 是否加入购物车

这些特征经过加权之后,会得到一个分数 zzz

这个分数本身不太好直接解释,但经过 Sigmoid 处理以后,就能变成一个概率。

比如输出 0.87,就可以理解为:

这个用户有 87% 的概率会购买。

这比直接输出一个奇怪的分数要自然很多。


6. 用 Python 写一个最简单的逻辑回归

下面直接看代码,还是用 scikit-learn

import numpy as np
from sklearn.linear_model import LogisticRegression

# 学习时长(小时)
X = np.array([1, 2, 3, 4, 5, 6]).reshape(-1, 1)

# 是否通过考试:0=没通过,1=通过
y = np.array([0, 0, 0, 1, 1, 1])

# 创建模型
model = LogisticRegression()

# 训练模型
model.fit(X, y)

# 预测一个每天学习 3.5 小时的学生是否会通过考试
new_data = np.array([[3.5]])

# 预测类别
pred_class = model.predict(new_data)

# 预测概率
pred_prob = model.predict_proba(new_data)

print("预测类别:", pred_class[0])
print("预测为 0 和 1 的概率:", pred_prob[0])

7. 这段代码具体在干什么

先看数据部分:

X = np.array([1, 2, 3, 4, 5, 6]).reshape(-1, 1)
y = np.array([0, 0, 0, 1, 1, 1])

这里的意思很简单:

  • 学习 1、2、3 小时的人没通过
  • 学习 4、5、6 小时的人通过了

当然,现实里数据不会这么整齐,这里只是为了方便理解。

然后是训练:

model.fit(X, y)

这一步就是让模型去学习:
学习时长和考试结果之间,大概存在什么关系。

最后做预测:

pred_class = model.predict(new_data)
pred_prob = model.predict_proba(new_data)

这里有两个输出:

  • predict() 给你最终类别
  • predict_proba() 给你概率

比如可能输出:

预测类别: 1
预测为 01 的概率: [0.35 0.65]

意思就是:

这个学生没通过的概率是 35%,通过的概率是 65%,所以最终模型判定他更可能通过。


8. 为什么我觉得“概率”这件事很重要

刚开始学分类的时候,我总会下意识地只看最后结果:到底是 0 还是 1。

但后来慢慢发现,很多时候真正有价值的不是“分类结果”,而是模型有多确定

比如这两个输出:

  • 样本 A:预测为 1,概率 0.51
  • 样本 B:预测为 1,概率 0.97

虽然最后都判成了 1,但其实差别很大。

前者只是勉强过线,后者则是非常确定。

这在实际业务里很有用。
比如风控、医疗、推荐系统,都不只是想知道“是什么”,还想知道“有多大把握”。

而逻辑回归的一个优点,就是它天然会给出概率。


9. 决策边界,其实就是“在哪一边算哪一类”

逻辑回归里还有个很常见的词,叫 决策边界

别被这个词吓到,它没那么玄。

你可以把它理解成一条分界线:

  • 线这边,判成 0
  • 线那边,判成 1

在刚才“学习时长”的例子里,这条边界可能就在某个小时数附近。

比如模型学出来:

  • 学习时间小于 3.7 小时,更可能不通过
  • 学习时间大于 3.7 小时,更可能通过

那 3.7 左右就相当于这个问题的决策边界。

如果特征变成两个,比如“学习时长”和“作业完成率”,那决策边界就可能变成一条线。
如果特征更多,它会变成更高维空间里的一个面。

本质上没变,还是那句话:

模型在找一个分界,把两类样本尽量分开。


10. 它为什么还叫“回归”

这个名字确实有点误导人。

简单说,是因为它虽然做的是分类,但内部其实是在对“某种概率关系”做建模,而不是像决策树那样直接硬分。

更直白一点地理解:

  • 线性回归:直接回归一个数值结果
  • 逻辑回归:先回归出一个线性组合,再通过函数转换成概率

所以它名字里留了“回归”两个字,但用途上已经是分类了。

刚学的时候你完全可以先记住一句话:

逻辑回归是分类模型,不要被名字骗了。

等以后学得更深,再回头看这个命名问题也不迟。


11. 逻辑回归适合用在什么地方

逻辑回归特别适合拿来做一些基础的二分类任务,比如:

  • 用户是否流失
  • 邮件是否垃圾邮件
  • 是否违约
  • 是否点击
  • 是否患病

它有几个优点很明显:

第一,简单
比很多复杂模型更容易理解,也更适合入门。

第二,训练快
数据量不是特别离谱的时候,训练起来很高效。

第三,可解释性相对不错
你可以去看各个特征的权重,大致知道哪些因素对结果影响更大。

所以哪怕现在大家动不动就上大模型、深度学习,逻辑回归也没有过时。
很多真实场景里,它仍然是一个很实用的基线模型。


12. 但它也不是万能的

逻辑回归虽然好用,但也有明显的局限。

它本质上还是一个比较“朴素”的线性模型。
如果数据之间的关系特别复杂、非线性特别强,它的效果可能就没那么理想。

举个很简单的例子:

如果两类数据在空间里交错得很复杂,根本没法靠一条直线或者一个平面分开,那逻辑回归就会比较吃力。

这也是为什么后面还会继续学习:

  • 决策树
  • 随机森林
  • SVM
  • 神经网络

因为不同模型适合解决不同类型的问题。

但这不影响逻辑回归的重要性。
它依然是理解分类问题最好的起点之一。


13. 学到这里,最好真的想明白三件事

如果你刚接触机器学习,我觉得逻辑回归这部分,最值得想明白的不是公式,而是下面三件事。

第一件事:

分类问题和回归问题到底有什么区别?

  • 回归预测连续值
  • 分类预测类别

第二件事:

为什么线性回归不适合直接做分类?

因为它的输出不受限制,可能超出 0 到 1 的范围,也不方便解释成概率。

第三件事:

逻辑回归真正输出的是什么?

不是一个生硬的类别,而是一个概率。
类别只是我们在概率基础上,按照阈值再做的一次判断。

这三件事一旦想通,逻辑回归就算真的入门了。


14. 最后简单收一下

逻辑回归虽然名字里有“回归”,但它本质上是一个分类算法。
它先对输入做线性组合,再通过 Sigmoid 函数把结果压到 0 到 1 之间,输出一个概率。
然后我们再根据这个概率,用阈值把它变成最终类别。

它不复杂,但很重要。
因为它是很多人第一次真正接触“分类思维”的地方。

学完逻辑回归之后,再去看交叉熵损失、混淆矩阵、精确率、召回率这些概念,就会顺很多。

更多推荐