【漫话机器学习系列】113.逻辑回归(Logistic Regression) VS 线性回归(Linear Regression)
逻辑回归 vs 线性回归:详解对比
在机器学习和统计学中,逻辑回归(Logistic Regression) 和 线性回归(Linear Regression) 都是非常常见的模型。尽管它们的数学表达式有一定的相似性,但它们的应用场景和目标却完全不同。本篇文章将详细对比两者的区别,并深入解析逻辑回归的数学原理。
1. 线性回归的基本概念
1.1 线性回归的数学表达
线性回归是一种监督学习算法,主要用于回归任务,即预测一个连续值。它的数学表达如下:
其中:
- y 是目标变量(预测值)。
是输入特征(自变量)。
是截距(bias)。
是回归系数(权重)。
- ϵ 是误差项。
1.2 线性回归的应用场景
- 预测房价(根据面积、位置、房龄等因素)。
- 预测股票价格(根据市场数据)。
- 预测员工工资(根据经验、教育背景等)。
1.3 线性回归的目标
线性回归的目标是找到最优参数 ,使得预测值
尽可能接近真实值 y。最常用的方法是最小二乘法(OLS, Ordinary Least Squares),即最小化均方误差(MSE):
2. 逻辑回归的基本概念
逻辑回归主要用于分类任务,特别是二分类问题。它的核心思想是使用Sigmoid 函数(S 形函数)将线性回归的结果映射到 (0,1) 之间,进而输出概率值。
2.1 逻辑回归的数学表达
逻辑回归的公式如下:
其中:
- P(y=1 | x)代表输入x 属于类别 y=1 的概率。
- e 是自然对数的底数(约 2.718)。
是模型参数。
这就是 Sigmoid 函数:
Sigmoid 函数的作用是将输入值压缩到 (0,1) 之间,使其可以解释为概率。如下图所示,Sigmoid 函数的曲线呈现 S 形:
当:
- z → +∞,σ(z) → 1(高概率)。
- z → −∞,σ(z) → 0(低概率)。
- z = 0z = 0,σ(0) = 0.5。
2.2 逻辑回归的目标
逻辑回归的目标是最大化似然函数(Maximum Likelihood Estimation, MLE),即找到最优的参数 ,使得训练数据的分类概率最大。
其损失函数为交叉熵损失(Cross Entropy Loss):
这个损失函数衡量了模型预测的概率与真实标签之间的差距。
3. 逻辑回归 vs 线性回归
下表总结了两者的主要区别:
对比项 | 线性回归(Linear Regression) | 逻辑回归(Logistic Regression) |
---|---|---|
目标任务 | 回归(Regression) | 分类(Classification) |
输出值 | 任何实数 | (0,1)(0,1)(0,1) 概率 |
函数形式 | 线性函数 | Sigmoid 函数 |
损失函数 | 均方误差(MSE) | 交叉熵损失(Cross Entropy) |
优化方法 | 最小二乘法(OLS)或梯度下降 | 最大似然估计(MLE)+梯度下降 |
应用场景 | 预测房价、股票、销量等 | 预测疾病、垃圾邮件、信用违约等 |
分类能力 | 不能分类 | 可以用于二分类问题 |
4. 为什么不能用线性回归做分类?
4.1 线性回归的输出不受限制
假设我们使用线性回归来做二分类:
然后我们使用一个阈值来分类,例如:
- y ≥ 0.5y 则预测为 1。
- y < 0.5y 则预测为 0。
但是,线性回归的输出范围是 (-∞, +∞),没有界限,而概率应该在 (0,1) 之间。
4.2 线性回归对异常值敏感
如果数据集中有一个异常值,比如 x 远大于其他样本,线性回归可能会预测 y 远大于 1,这与概率的定义不符。
4.3 线性回归无法拟合 S 形决策边界
许多分类问题的数据分布是非线性的,而逻辑回归的 Sigmoid 函数可以拟合S 形决策边界,但线性回归不能。
5. Python 代码示例
5.1 线性回归示例
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
import numpy as np
# 生成回归数据
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
# 训练线性回归模型
model = LinearRegression()
model.fit(X, y)
# 预测
y_pred = model.predict(X)
5.2 逻辑回归示例
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
# 生成分类数据
X, y = make_classification(n_samples=100, n_features=2, random_state=42)
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X, y)
# 预测
y_pred = model.predict(X)
6. 结论
- 线性回归用于回归问题,逻辑回归用于分类问题。
- 逻辑回归通过Sigmoid 函数将输出映射到 (0,1) 之间,使其可以解释为概率。
- 逻辑回归使用交叉熵损失进行优化,而线性回归使用最小二乘法。
- 在分类任务中,不能使用线性回归,否则会导致结果不可解释。
逻辑回归虽然简单,但在分类问题中仍然是一个强大的基线模型,并且具有很好的可解释性。