机器学习入门(2):逻辑回归
逻辑回归:名字像回归,实际却是做分类的
刚开始学机器学习时,我对“逻辑回归”这个名字一直很困惑。
因为前面刚学完线性回归,已经知道“回归”通常是在预测一个连续值,比如房价、气温、销量。结果一看到逻辑回归,发现它居然是拿来做分类的,比如判断一封邮件是不是垃圾邮件、判断用户会不会流失、判断肿瘤是良性还是恶性。
那它到底为什么叫“回归”?
这篇就把这件事讲清楚。
1. 先说结论:逻辑回归是分类算法
逻辑回归最常见的用途,不是预测一个具体数值,而是判断一个样本属于哪一类。
比如:
- 一封邮件是不是垃圾邮件
- 一个用户会不会点击广告
- 一笔交易是不是欺诈
- 一个学生会不会通过考试
这些问题都有一个共同点:
结果通常只有两种。
比如:
- 是 / 否
- 0 / 1
- 正类 / 负类
这类问题就叫 二分类问题。
逻辑回归就是解决这类问题里最经典、最基础的方法之一。
2. 它为什么不能直接用线性回归来做分类
先看一个最简单的例子。
假设我们想根据学生每天学习的时间,预测他能不能通过考试。
数据可能像这样:
| 学习时长(小时) | 是否通过考试 |
|---|---|
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 1 |
| 5 | 1 |
| 6 | 1 |
这里:
- 输入是学习时长
- 输出只有两个值: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+e−z1
第一眼看这个公式,确实容易头大。
但你其实不用一上来就背公式,只需要知道它干了一件非常重要的事:
把任意一个数,映射到 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
预测为 0 和 1 的概率: [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 之间,输出一个概率。
然后我们再根据这个概率,用阈值把它变成最终类别。
它不复杂,但很重要。
因为它是很多人第一次真正接触“分类思维”的地方。
学完逻辑回归之后,再去看交叉熵损失、混淆矩阵、精确率、召回率这些概念,就会顺很多。
更多推荐


所有评论(0)