共计 1759 个字符,预计需要花费 5 分钟才能阅读完成。
背景介绍
逻辑回归虽然名字里带“回归”,但实际上是解决分类问题的经典算法。与线性回归直接预测连续值不同,逻辑回归通过概率形式输出样本属于某个类别的可能性。比如在金融风控中预测用户违约概率,或在医疗领域判断肿瘤是否为恶性。

- 核心区别 :线性回归拟合 $y=w^Tx+b$,输出无限制;逻辑回归用 $\sigma(w^Tx+b)$ 将输出压缩到(0,1) 区间
- 优势场景:二分类问题、需要概率输出的场景、特征与目标呈近似线性关系时
数学原理
Sigmoid 函数:概率的转换器
逻辑回归的核心是 sigmoid 函数:
$$\sigma(z) = \frac{1}{1+e^{-z}}$$
- 将任意实数映射到 (0,1) 区间,完美契合概率定义
- 函数曲线呈 S 形,在 z = 0 附近变化敏感,两端梯度平缓
- 导数有优雅形式:$\sigma'(z) = \sigma(z)(1-\sigma(z))$
最大似然估计:寻找最优参数
不同于线性回归的最小二乘法,逻辑回归采用概率思想:
- 定义似然函数:$L(w) = \prod_{i=1}^n p^{y_i}(1-p)^{1-y_i}$
- 取对数得到对数似然:$\ell(w) = \sum [y_i\log p + (1-y_i)\log(1-p)]$
- 对 w 求偏导可得梯度:$\frac{\partial \ell}{\partial w_j} = \sum (y_i – p_i)x_{ij}$
Python 实现
基础实现(NumPy 版)
import numpy as np
class LogisticRegression:
def __init__(self, lr=0.01, n_iters=1000):
self.lr = lr # 学习率
self.n_iters = n_iters # 迭代次数
self.weights = None
self.bias = None
def _sigmoid(self, z):
return 1 / (1 + np.exp(-z))
def fit(self, X, y):
n_samples, n_features = X.shape
self.weights = np.zeros(n_features)
self.bias = 0
# 梯度下降
for _ in range(self.n_iters):
linear_pred = np.dot(X, self.weights) + self.bias
predictions = self._sigmoid(linear_pred)
# 计算梯度
dw = (1/n_samples) * np.dot(X.T, (predictions - y))
db = (1/n_samples) * np.sum(predictions - y)
# 更新参数
self.weights -= self.lr * dw
self.bias -= self.lr * db
def predict(self, X, threshold=0.5):
linear_pred = np.dot(X, self.weights) + self.bias
y_pred = self._sigmoid(linear_pred)
return [1 if i > threshold else 0 for i in y_pred]
关键点说明
- 矩阵运算:使用
np.dot实现向量化计算,比循环快 10-100 倍 - 学习率选择:建议从 0.01 开始尝试,过大容易震荡,过小收敛慢
- 停止条件:可增加早停机制(验证集精度不再提升时终止)
性能优化
特征缩放实践
当特征量纲差异大时(如年龄 vs 收入):
- 标准化:$x’ = \frac{x-\mu}{\sigma}$
- 归一化:$x’ = \frac{x – min}{max – min}$
学习率调整策略
- 指数衰减:$\eta_t = \eta_0 \cdot 0.95^t$
- 自适应方法:AdaGrad、Adam 等
生产环境避坑指南
常见问题解决方案
- 过拟合:增加 L2 正则化项,或使用 Elastic Net
- 特征共线性:计算 VIF 值,>10 的特征考虑删除
- 类别不平衡 :采用过采样(SMOTE) 或调整类别权重
总结与思考
逻辑回归作为基础算法,在可解释性、训练效率上仍有优势:
- 优点:模型简单、计算高效、输出概率、可解释性强
- 局限:无法处理非线性关系(可通过核方法改进)
- 升级路线:尝试加入多项式特征,或转向神经网络
建议读者在 UCI 的乳腺癌数据集上测试代码,观察不同学习率对收敛速度的影响。实践中遇到决策边界不明显时,可以尝试特征组合或更复杂的模型。
正文完
发表至: 未分类
近一天内
