专题:Python机器学习系统学习
关键词:Python, 机器学习, 逻辑回归, Sigmoid, 交叉熵, Softmax, 混淆矩阵, ROC曲线, AUC
逻辑回归(Logistic Regression)是机器学习中最基础且应用最广泛的分类算法之一。尽管名称中包含"回归"二字,但逻辑回归本质上是一种用于解决二分类问题(Binary Classification)的线性分类算法。它通过将线性回归的输出结果映射到概率区间[0,1],从而实现对样本类别的预测。
逻辑回归的核心思想是:先建立特征与目标变量之间的线性关系,然后通过一个非线性函数(Sigmoid函数)将线性输出转换为概率值,最后根据概率值进行类别判断。线性部分的表达式为 z = w^T x + b,其中 w 是权重向量,x 是特征向量,b 是偏置项。这个线性组合的结果 z 的取值范围是 (-∞, +∞)。
决策边界(Decision Boundary)是逻辑回归中重要的概念。当 Sigmoid 函数的输出值等于 0.5 时,对应的 z = 0,即 w^T x + b = 0 这条线(或超平面)就是决策边界。决策边界的一侧预测为正类(概率大于0.5),另一侧预测为负类(概率小于0.5)。逻辑回归的决策边界本质上是线性的,这也是它的主要局限之一。
核心要点:逻辑回归名义上是"回归",实际是分类算法。它通过 Sigmoid 函数将线性输出压缩到 [0,1] 区间,以概率形式给出分类结果。决策边界由 w^T x + b = 0 定义,本质上是线性的。
Sigmoid 函数是逻辑回归的核心数学组件,其数学形式为:
其中 z = w^T x + b 是线性组合的输出。Sigmoid 函数具有以下几个重要特性:
在概率解释上,逻辑回归模型的输出 σ(z) 直接表示样本 x 属于正类(通常标记为 1)的概率:P(y=1|x) = σ(w^T x + b)。相应地,属于负类的概率为 P(y=0|x) = 1 - σ(w^T x + b)。
阈值(Threshold)是决定最终分类结果的关键参数。默认情况下,通常设定阈值为 0.5:若 σ(z) ≥ 0.5,预测为正类;否则预测为负类。但在实际应用中,可以根据具体场景调整阈值。例如在疾病筛查中,为了减少漏诊,可能会将阈值降低到 0.3 或 0.4,宁可误报也不漏报。
在逻辑回归中,损失函数的选择至关重要。一个很自然的想法是沿用线性回归的均方误差(MSE),但 MSE 用于逻辑回归时会带来严重的问题:
因此,逻辑回归采用对数损失(Log Loss),也称为交叉熵损失(Cross-Entropy Loss)。对于单个样本 (x, y),损失函数定义为:
其中 ŷ = σ(z) 是模型预测的概率,y ∈ {0, 1} 是真实标签。这个公式的直观理解是:当真实标签 y=1 时,损失为 -log(ŷ),ŷ 越接近 1 损失越小;当 y=0 时,损失为 -log(1-ŷ),ŷ 越接近 0 损失越小。
从极大似然估计的角度推导:逻辑回归的似然函数为 L(w) = Π P(y_i|x_i; w) = Π [σ(z_i)]^{y_i} · [1-σ(z_i)]^{1-y_i}。取对数后得到对数似然函数,最大化对数似然等价于最小化负的对数似然,这正是交叉熵损失函数。因此,最小化交叉熵损失本质上是在做极大似然估计。
损失函数对参数 w 的梯度为:∂L/∂w = (ŷ - y) · x。这个梯度形式与线性回归的梯度惊人地相似,区别仅在于 ŷ 的计算方式不同。梯度下降更新公式为:w := w - α · (ŷ - y) · x,其中 α 是学习率。
逻辑回归天然支持二分类问题,但通过策略扩展也可以处理多分类任务。常用的方法有以下三种:
OvR 是最常用的多分类扩展策略。对于 K 个类别,训练 K 个独立的二分类器,每个分类器负责区分"该类"与"其他所有类"。预测时,计算样本属于每个类别的概率,选择概率最大的类别作为最终预测结果。OvR 的优点是简单直观,每个二分类器可以独立训练;缺点是当类别数量较多时,每个分类器面临严重的类别不平衡问题。
OvO 策略在每两个类别之间训练一个二分类器。对于 K 个类别,需要训练 K×(K-1)/2 个分类器。预测时采用投票机制:每个分类器投票给预测的类别,得票最多的类别胜出。OvO 的优点是每个分类器只需处理两个类别的数据,训练数据量小;缺点是分类器数量随类别数平方增长,计算开销大。
Softmax 回归是逻辑回归在多分类问题上的直接推广。它使用 Softmax 函数替代 Sigmoid 函数,直接输出样本属于每个类别的概率分布。Softmax 函数的定义为:
其中 z_k = w_k^T x + b_k 是第 k 个类别的线性输出。Softmax 函数确保所有类别的概率之和为 1,且每个概率值在 (0,1) 区间内。Softmax 回归的损失函数相应地使用多类别交叉熵损失。
在 scikit-learn 中,LogisticRegression 类默认使用 OvR 策略(multi_class='ovr'),可以通过设置 multi_class='multinomial' 来使用 Softmax 回归。代码示例如下:
分类模型的评估需要一套比回归更丰富的指标体系。以下是最常用的评估工具和方法:
混淆矩阵是分类评估的基础,它是一个 2×2 的表格(二分类情况),包含四个核心指标:
| 指标 | 公式 | 含义 |
|---|---|---|
| 准确率(Accuracy) | (TP+TN)/(TP+TN+FP+FN) | 所有预测正确的比例。在类别不平衡时可能产生误导。 |
| 精确率(Precision) | TP/(TP+FP) | 预测为正类的样本中,实际为正类的比例。关注"误报"。 |
| 召回率(Recall) | TP/(TP+FN) | 实际为正类的样本中,被正确预测的比例。关注"漏报"。 |
| F1-Score | 2×P×R/(P+R) | 精确率和召回率的调和平均,综合评价分类器性能。 |
ROC 曲线(Receiver Operating Characteristic curve)以假正率(FPR = FP/(FP+TN))为横轴,真正率(TPR = TP/(TP+FN),即召回率)为纵轴,展示了分类器在不同阈值下的性能表现。AUC(Area Under the Curve)是 ROC 曲线下方的面积,取值范围 [0, 1]。AUC 值越大,说明分类器的排序能力越强。AUC=0.5 表示模型没有区分能力(相当于随机猜测),AUC=1.0 表示完美分类器。
在类别严重不平衡的场景下(如欺诈检测、罕见病诊断),PR 曲线(Precision-Recall curve)比 ROC 曲线更具参考价值。PR 曲线以召回率为横轴、精确率为纵轴,能够更清晰地反映模型在少数类上的表现。
实际应用中,可以根据业务需求灵活调整分类阈值。例如:
为防止过拟合并提升模型的泛化能力,逻辑回归引入了正则化技术。scikit-learn 中的 LogisticRegression 提供了丰富的配置选项:
在 scikit-learn 中,正则化强度由参数 C 控制。C 是正则化强度 λ 的倒数(C = 1/λ),因此:
当数据集中各类别样本数量严重不均时,模型会偏向多数类。LogisticRegression 提供了 class_weight 参数来解决这个问题:
scikit-learn 的 LogisticRegression 提供了多种求解器,选择合适的求解器对训练效率和效果有重要影响:
| 求解器 | 适用场景 | 特点 |
|---|---|---|
| liblinear | 小数据集、L1 正则化 | 基于坐标下降法,不支持多分类原生 |
| lbfgs | 中小数据集、L2 正则化 | 拟牛顿法,收敛快,默认求解器 |
| sag | 大数据集 | 随机平均梯度下降,数据量大时效率高 |
| saga | 大数据集、L1/L2/Elastic-Net | sag 的改进版,支持多种正则化 |
逻辑回归在以下场景中表现尤为出色:
总结:逻辑回归是机器学习入门的必修算法,也是工业界应用最广泛的分类模型之一。它简单高效、可解释性强,尽管表达能力有限,但通过合理的特征工程和正则化策略,在许多实际问题中都能取得令人满意的效果。理解逻辑回归的核心原理(Sigmoid 函数、交叉熵损失、梯度下降、正则化),是深入学习更复杂分类算法的坚实基础。