共计 1828 个字符,预计需要花费 5 分钟才能阅读完成。
逻辑回归是机器学习中最基础但应用最广泛的分类算法之一。它虽然名字里有 ” 回归 ”,但实际上是一个分类模型。今天我们就来深入探讨逻辑回归的方方面面,从数学原理到工程实现。

1. 逻辑回归的数学原理
逻辑回归的核心思想是通过线性回归的变体来解决分类问题。它使用 sigmoid 函数将线性回归的输出映射到 (0,1) 区间,表示概率。
-
核心公式:
p(y=1|x) = 1 / (1 + e^(-w^T x))其中 w 是权重向量,x 是特征向量。
-
为什么用 sigmoid 函数:
- 将任意实数映射到 (0,1) 区间
- 具有良好的数学性质,导数容易计算
- 输出可以解释为概率
2. 与线性回归的对比
虽然两者都使用线性组合,但有本质区别:
- 逻辑回归用于分类,线性回归用于回归
- 逻辑回归输出概率,线性回归输出连续值
- 逻辑回归使用 sigmoid 函数,线性回归直接输出
- 逻辑回归使用交叉熵损失,线性回归使用 MSE
3. 损失函数与优化
逻辑回归使用交叉熵损失函数,而不是线性回归的均方误差(MSE)。
-
交叉熵损失推导:
L = -[y*log(p) + (1-y)*log(1-p)]其中 y 是真实标签,p 是预测概率。
-
优化方法:
- 梯度下降
- 随机梯度下降
- L-BFGS
- 牛顿法
4. 正则化实现
正则化是防止过拟合的关键技术。
- L1 正则化(Lasso):
- 增加权重绝对值的惩罚项
- 可以产生稀疏解
-
适合特征选择
-
L2 正则化(Ridge):
- 增加权重平方的惩罚项
- 使权重平滑
-
防止极端权重值
-
ElasticNet:
- L1 和 L2 的组合
- 兼具两者优点
5. Python 代码实现
下面是一个完整的逻辑回归实现示例,包含特征工程:
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report
import pandas as pd
# 1. 数据加载
# 假设有一个二分类数据集
data = pd.read_csv('binary_classification_data.csv')
# 2. 特征工程
# 标准化连续特征
scaler = StandardScaler()
continuous_features = ['age', 'income', 'balance']
data[continuous_features] = scaler.fit_transform(data[continuous_features])
# 3. 数据集划分
X = data.drop('target', axis=1)
y = data['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 4. 模型训练
# 使用 L2 正则化
model = LogisticRegression(penalty='l2', C=1.0, solver='lbfgs', max_iter=1000)
model.fit(X_train, y_train)
# 5. 模型评估
print(classification_report(y_test, model.predict(X_test)))
6. 模型评估指标
不同场景需要不同的评估指标:
- 准确率(Accuracy):
- 适用于类别平衡的数据
-
计算公式:(TP+TN)/(TP+TN+FP+FN)
-
召回率(Recall):
- 关注识别所有正例
- 适用于医疗诊断等场景
-
计算公式:TP/(TP+FN)
-
精确率(Precision):
- 关注预测的准确度
- 适用于垃圾邮件过滤等场景
-
计算公式:TP/(TP+FP)
-
AUC-ROC:
- 评估模型整体区分能力
- 不依赖分类阈值
- 取值范围 0.5-1.0
7. 生产环境常见问题
- 类别不平衡:
-
解决方案:
- 过采样 / 欠采样
- 类别权重
- 使用 F1-score 等指标
-
特征共线性:
-
解决方案:
- 特征选择
- PCA 降维
- 正则化
-
过拟合:
- 解决方案:
- 增加训练数据
- 正则化
- 早停
进阶思考题
- 当特征数量远大于样本数量时,逻辑回归会遇到什么问题?如何解决?
- 如何解释逻辑回归模型的权重系数?不同尺度的特征会影响解释性吗?
- 在多分类问题中,逻辑回归有哪些扩展方法?各有什么优缺点?
逻辑回归看似简单,但在实际应用中需要掌握诸多细节。希望这篇文章能帮助你深入理解这个基础而强大的算法,并在实际项目中发挥它的价值。
正文完
