机器学习系列三【逻辑回归(Sigmoid函数、交叉熵损失)】
机器学习系列三【逻辑回归(Sigmoid函数、交叉熵损失)】
JayVei机器学习系列三:逻辑回归(分类的利器,Sigmoid 与交叉熵)
欢迎回到“机器学习系列”!在上一篇文章中,我们学习了如何用线性回归来预测连续的数值(比如房价、销售额)。但是,如果我们要解决的问题不是预测具体的数值,而是做选择题呢?
比如:这封邮件是“垃圾邮件”还是“正常邮件”?这个肿瘤是“恶性”还是“良性”?图片里的是“猫”还是“狗”?
这类问题在机器学习中被称为分类(Classification)问题。今天,我们将介绍分类领域中最基础、最经典的算法——逻辑回归(Logistic Regression)。
💡 避坑指南: 虽然它的名字里带有“回归”二字,但逻辑回归是一个彻头彻尾的分类算法,最常用于解决二分类问题(是或否)。
1. 为什么不能直接用线性回归做分类?
你可能会想:既然是二分类(0 或 1),我能不能直接用线性回归拟合一条直线,然后设定一个阈值(比如 0.5)?大于 0.5 的预测为 1,小于 0.5 的预测为 0?
在某些极其理想的情况下,这似乎可行。但线性回归在分类任务上有两个致命缺陷:
- 对异常值极其敏感:如果数据集中突然出现一个极端的样本点,线性回归的直线会被严重拉扯,导致原本分类正确的点被错误划分。
- 输出范围不受限:线性回归的预测输出值可以远大于 1,也可以是负数。但分类问题的概率结果应该被严格限制在 0 到 1 之间。
为了解决这些问题,我们需要请出逻辑回归的核心武器——Sigmoid 函数。
2. 核心魔法:Sigmoid 函数
为了让线性回归的输出老老实实地待在 0 到 1 之间,我们给线性模型的输出 $\theta^T x$ 套上了一个“转换器”,这个转换器就是 Sigmoid 函数(也叫逻辑函数)。
Sigmoid 函数的数学公式如下:
$$g(z)=\frac{1}{1+e^{-z}}$$
这个函数有一个非常优美的 S 型曲线。它具有以下神奇的特性:
- 当 $z=0$ 时,$g(z)=0.5$。
- 当 $z$ 趋近于正无穷大时,$g(z)$ 无限趋近于 1。
- 当 $z$ 趋近于负无穷大时,$g(z)$ 无限趋近于 0。
通过将线性回归的输出代入 Sigmoid 函数,我们就得到了逻辑回归的预测模型:
$$h_\theta(x)=\frac{1}{1+e^{-\theta^T x}}$$
现在,$h_\theta(x)$ 的输出有了明确的物理意义:它代表了在给定特征 $x$ 和参数 $\theta$ 的情况下,样本属于正类(标签为 1)的概率。
3. 告别 MSE:为什么我们需要交叉熵损失?
在上一篇线性回归中,我们使用了均方误差(MSE)作为代价函数。那在逻辑回归中还能继续用 MSE 吗?
答案是:强烈不建议。
如果我们把逻辑回归的模型 $h_\theta(x)$ 代入到 MSE 的公式中,由于 Sigmoid 函数中存在非线性的指数项,整个代价函数会变成一个“非凸函数”(Non-convex function)。这意味着函数图像会有非常多的局部最低点,如果我们使用梯度下降法去寻找最优解,极其容易被困在某个坑里出不来,找不到真正的全局最优解。
为了保证代价函数是一个平滑的“碗状”凸函数,逻辑回归引入了全新的代价函数——交叉熵损失(Cross-Entropy Loss,也叫对数损失 Log Loss)。
3.1 交叉熵的直观理解
对于单个样本,交叉熵代价函数的定义是分段的:
- 当真实标签 $y=1$ 时: 误差为 $-\log(h_\theta(x))$。如果模型预测的概率接近 1,误差几乎为 0;如果预测概率接近 0,误差将趋近于无穷大(给予极其严厉的惩罚)。
- 当真实标签 $y=0$ 时: 误差为 $-\log(1-h_\theta(x))$。逻辑同上,预测越偏离 0,惩罚越重。
3.2 优雅的合并公式
为了方便计算机求导和优化,聪明的数学家们巧妙地利用 $y$ 只能取 0 或 1 的特性,将上述分段函数合并成了一个极其优雅的方程式。
对于包含 $m$ 个样本的整个训练集,逻辑回归的总体代价函数 $J(\theta)$ 如下:
$$J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}\log(h_\theta(x^{(i)}))+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))]$$
一旦我们定义好了这个凸的代价函数,剩下的工作就和线性回归一样了——使用梯度下降法(Gradient Descent)来不断更新参数 $\theta$,直到找到让 $J(\theta)$ 最小的最优解。
4. 总结
逻辑回归虽然基础,但它是现代深度学习的基石(神经网络中的神经元本质上就是执行类似逻辑回归的操作)。
- 我们用 Sigmoid 函数 将连续的线性输出映射成了 $(0, 1)$ 之间的概率。
- 我们用 交叉熵损失 替换了均方误差,不仅保证了函数的凸性,还完美契合了概率预测的惩罚逻辑。
掌握了线性回归和逻辑回归,你就已经拿下了机器学习中“连续预测”和“离散分类”的两大开山之作。
这是一份为你补充的实战演练部分。你可以直接将这部分内容无缝衔接到《机器学习系列三:逻辑回归》博客的末尾,让读者在理解理论后立刻获得动手成就感。
5. 实战演练:Python (Scikit-Learn) 代码与决策边界可视化
光说不练假把式。接下来,我们将使用 Python 中最强大的机器学习库 Scikit-Learn,用短短十几行代码实现一个逻辑回归模型,并把它如何“切分”数据的决策边界(Decision Boundary)直观地画出来。
5.1 实战代码
在这个例子中,我们首先生成一个包含两个特征(方便在二维平面上画图)的二分类数据集,然后训练模型并进行可视化。
1 | import numpy as np |
5.2 运行结果解析
当你运行这段代码后,你会看到一张带有两类数据点(比如红色和蓝色)的散点图,并且整个背景被划分成了两种颜色。
- 背景颜色的交界线:这就是逻辑回归模型学到的决策边界。
- 线性本质:你会清晰地发现,这条边界是一条笔直的直线!这直观地证明了逻辑回归虽然用了非线性的 Sigmoid 函数将输出映射为概率,但它在特征空间中划分数据的边界依然是线性的。因此,逻辑回归本质上仍然是一个线性分类器。
💡 进阶思考: 如果两类数据像太极图一样互相缠绕,一条直线根本切不开怎么办?这时候我们可以在逻辑回归中引入多项式特征(把特征进行平方、相乘等操作),或者直接拥抱更强大的非线性模型(如支持向量机 SVM、决策树或神经网络)。




