机器学习入门核心算法:逻辑回归(Logistic Regression)
- 一、算法逻辑
- 1.1 基本概念
- 1.2 Sigmoid函数
- 1.3 决策边界
- 二、算法原理与数学推导
- 2.1 概率建模
- 2.2 损失函数推导
- 2.3 梯度下降优化
- 2.4 正则化处理
- 三、模型评估
- 3.1 常用评估指标
- 3.2 ROC曲线与AUC
- 四、应用案例
- 4.1 金融风控:贷款违约预测
- 4.2 医疗诊断:乳腺癌检测
- 五、经典面试题解析
- 问题1:为什么逻辑回归用交叉熵损失而不用MSE?
- 问题2:逻辑回归如何处理多分类?
- 六、最佳实践
- 6.1 特征工程技巧
- 6.2 超参数调优
- 七、总结与展望
一、算法逻辑
1.1 基本概念
逻辑回归(Logistic Regression)是一种广义线性模型,主要用于解决二分类问题(也可扩展至多分类)。其核心思想是通过将线性回归的预测值映射到[0,1]区间,得到样本属于某个类别的概率。
与线性回归的本质区别:
- 线性回归:
y = w T x + b y = w^Tx + b y=wTx+b
(直接预测连续值) - 逻辑回归:
p = σ ( w T x + b ) p = \sigma(w^Tx + b) p=σ(wTx+b)
(预测概率值)
1.2 Sigmoid函数
使用Sigmoid函数实现概率映射:
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z) = \frac{1}{1 + e^{-z}}
σ(z)=1+e−z1
特性分析:
- 值域: ( 0 , 1 ) (0,1) (0,1),符合概率定义
- 导数易计算:
σ ′ ( z ) = σ ( z ) ( 1 − σ ( z ) ) \sigma'(z) = \sigma(z)(1-\sigma(z)) σ′(z)=σ(z)(1−σ(z)) - 输出对称性:
1 − σ ( z ) = σ ( − z ) 1 - \sigma(z) = \sigma(-z) 1−σ(z)=σ(−z)
1.3 决策边界
假设取阈值为0.5时的决策规则:
y
^
=
{
1
if
σ
(
w
T
x
)
≥
0.5
0
otherwise
\hat{y} = \begin{cases} 1 & \text{if } \sigma(w^Tx) \geq 0.5 \\ 0 & \text{otherwise} \end{cases}
y^={10if σ(wTx)≥0.5otherwise
对应的线性决策边界:
w
T
x
=
0
w^Tx = 0
wTx=0
二、算法原理与数学推导
2.1 概率建模
正类概率:
P
(
y
=
1
∣
x
)
=
1
1
+
e
−
(
w
T
x
+
b
)
P(y=1|x) = \frac{1}{1 + e^{-(w^Tx + b)}}
P(y=1∣x)=1+e−(wTx+b)1
负类概率:
P
(
y
=
0
∣
x
)
=
1
−
P
(
y
=
1
∣
x
)
=
e
−
(
w
T
x
+
b
)
1
+
e
−
(
w
T
x
+
b
)
P(y=0|x) = 1 - P(y=1|x) = \frac{e^{-(w^Tx + b)}}{1 + e^{-(w^Tx + b)}}
P(y=0∣x)=1−P(y=1∣x)=1+e−(wTx+b)e−(wTx+b)
2.2 损失函数推导
极大似然估计:
L
(
w
)
=
∏
i
=
1
n
P
(
y
i
∣
x
i
;
w
)
=
∏
i
=
1
n
y
^
i
y
i
(
1
−
y
^
i
)
1
−
y
i
L(w) = \prod_{i=1}^n P(y_i|x_i;w) = \prod_{i=1}^n \hat{y}_i^{y_i}(1-\hat{y}_i)^{1-y_i}
L(w)=i=1∏nP(yi∣xi;w)=i=1∏ny^iyi(1−y^i)1−yi
对数似然函数:
ℓ
(
w
)
=
∑
i
=
1
n
[
y
i
ln
y
^
i
+
(
1
−
y
i
)
ln
(
1
−
y
^
i
)
]
\ell(w) = \sum_{i=1}^n \left[ y_i \ln \hat{y}_i + (1-y_i)\ln(1-\hat{y}_i) \right]
ℓ(w)=i=1∑n[yilny^i+(1−yi)ln(1−y^i)]
交叉熵损失函数:
J
(
w
)
=
−
1
n
∑
i
=
1
n
[
y
i
ln
σ
(
w
T
x
i
)
+
(
1
−
y
i
)
ln
(
1
−
σ
(
w
T
x
i
)
)
]
J(w) = -\frac{1}{n}\sum_{i=1}^n \left[ y_i \ln \sigma(w^Tx_i) + (1-y_i)\ln(1-\sigma(w^Tx_i)) \right]
J(w)=−n1i=1∑n[yilnσ(wTxi)+(1−yi)ln(1−σ(wTxi))]
2.3 梯度下降优化
梯度计算:
∂
J
∂
w
j
=
1
n
∑
i
=
1
n
(
σ
(
w
T
x
i
)
−
y
i
)
x
i
j
\frac{\partial J}{\partial w_j} = \frac{1}{n}\sum_{i=1}^n (\sigma(w^Tx_i) - y_i)x_{ij}
∂wj∂J=n1i=1∑n(σ(wTxi)−yi)xij
参数更新公式:
w
j
:
=
w
j
−
α
∂
J
∂
w
j
w_j := w_j - \alpha \frac{\partial J}{\partial w_j}
wj:=wj−α∂wj∂J
2.4 正则化处理
正则化类型:
类型 | 公式 | 特点 |
---|---|---|
L1 | J ( w ) + = λ ∣ w ∣ 1 J(w) += \lambda |w|_1 J(w)+=λ∣w∣1 | 产生稀疏解 |
L2 | J ( w ) + = λ 2 ∣ w ∣ 2 2 J(w) += \frac{\lambda}{2}|w|_2^2 J(w)+=2λ∣w∣22 | 平滑权重衰减 |
三、模型评估
3.1 常用评估指标
指标 | 公式 | 说明 |
---|---|---|
准确率 | T P + T N T P + T N + F P + F N \frac{TP+TN}{TP+TN+FP+FN} TP+TN+FP+FNTP+TN | 总体预测正确率 |
精确率 | T P T P + F P \frac{TP}{TP+FP} TP+FPTP | 预测为正类的准确率 |
召回率 | T P T P + F N \frac{TP}{TP+FN} TP+FNTP | 正类样本的覆盖率 |
F1 Score | 2 ⋅ P r e c i s i o n ⋅ R e c a l l P r e c i s i o n + R e c a l l 2 \cdot \frac{Precision \cdot Recall}{Precision + Recall} 2⋅Precision+RecallPrecision⋅Recall | 精确率与召回率调和平均 |
3.2 ROC曲线与AUC
ROC曲线绘制步骤:
- 调整分类阈值,计算不同阈值下的TPR和FPR:
T P R = T P T P + F N , F P R = F P F P + T N TPR = \frac{TP}{TP+FN}, \quad FPR = \frac{FP}{FP+TN} TPR=TP+FNTP,FPR=FP+TNFP - 以FPR为横轴,TPR为纵轴绘制曲线
AUC值意义:
- AUC=0.5:随机猜测
- AUC=1.0:完美分类器
四、应用案例
4.1 金融风控:贷款违约预测
数据处理流程:
# Python代码示例
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
# 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 模型训练
model = LogisticRegression(penalty='l1', solver='liblinear')
model.fit(X_train, y_train)
模型输出结果:
- AUC: 0.85
- KS值: 0.42
4.2 医疗诊断:乳腺癌检测
特征重要性分析:
特征 | 权重 | 显著性(p值) |
---|---|---|
细胞核半径 | 2.34 | <0.001 |
纹理均匀度 | -1.56 | 0.023 |
边缘平滑度 | 0.89 | 0.142 |
五、经典面试题解析
问题1:为什么逻辑回归用交叉熵损失而不用MSE?
深度解析:
-
损失函数曲面特性:
- MSE损失在逻辑回归中非凸,存在多个局部最小值
- 交叉熵损失是凸函数,保证全局最优解
-
梯度更新效率:
∂ J M S E ∂ w = ( y ^ − y ) y ^ ( 1 − y ^ ) x \frac{\partial J_{MSE}}{\partial w} = (\hat{y} - y)\hat{y}(1-\hat{y})x ∂w∂JMSE=(y^−y)y^(1−y^)x- 当预测值接近0或1时,梯度趋于0,导致更新缓慢
- 交叉熵梯度直接为 ( y ^ − y ) x (\hat{y} - y)x (y^−y)x,更新速度稳定
问题2:逻辑回归如何处理多分类?
两种实现方式对比:
方法 | 公式 | 优缺点 |
---|---|---|
One-vs-Rest (OvR) | 训练K个二分类器 | 简单但可能类别不平衡 |
Softmax回归 | P ( y = k ) = e w k T x ∑ e w j T x P(y=k) = \frac{e^{w_k^Tx}}{\sum e^{w_j^Tx}} P(y=k)=∑ewjTxewkTx | 直接建模多分类 |
六、最佳实践
6.1 特征工程技巧
- 分箱处理:
将连续变量离散化,增强模型鲁棒性pd.cut(df['age'], bins=5, labels=False)
- 交互特征:
通过特征组合捕捉非线性关系
x 3 = x 1 × x 2 x_3 = x_1 \times x_2 x3=x1×x2
6.2 超参数调优
网格搜索示例:
from sklearn.model_selection import GridSearchCV
params = {
'C': [0.1, 1, 10],
'penalty': ['l1', 'l2']
}
grid = GridSearchCV(LogisticRegression(), params, cv=5)
grid.fit(X, y)
七、总结与展望
核心优势:
- 输出概率解释性强
- 训练效率高(时间复杂度O(n))
- 可通过正则化防止过拟合
未来方向:
- 与深度学习结合(如神经网络最后一层使用逻辑回归)
- 在线学习场景下的增量更新