datawhalechina/pumpkin-book第3章线性模型:逻辑回归公式详解与分类阈值选择
【免费下载链接】pumpkin-book 《机器学习》(西瓜书)公式详解 项目地址: https://gitcode.com/datawhalechina/pumpkin-book
你是否在机器学习实践中遇到过这些问题:明明公式推导正确却始终无法得到理想的分类效果?调整阈值时不知道该从何下手?本文将以Datawhale开源项目pumpkin-book的第3章内容为基础,用通俗易懂的方式拆解逻辑回归公式推导过程,并通过实际案例说明如何科学选择分类阈值,让你的模型性能提升一个台阶。
逻辑回归的数学本质
逻辑回归虽然名字中带有"回归"二字,却是解决分类问题的强大工具。它通过Sigmoid函数将线性回归的输出压缩到[0,1]区间,巧妙地将回归问题转化为二分类问题。
Sigmoid函数的魔力
Sigmoid函数的数学表达式如下:
$$ y = \frac{1}{1+e^{-(\boldsymbol{w}^\mathrm{T}\boldsymbol{x}+b)}} $$
这个看似简单的函数具有两个关键特性:
- 值域压缩:无论输入值大小,输出始终落在0到1之间,可直接解释为概率
- 单调递增:保留了线性回归的趋势特性
- 可导性:方便使用梯度下降等优化算法求解参数
从线性回归到逻辑回归
逻辑回归的核心思想是将线性回归的输出通过Sigmoid函数映射为分类概率。用数学语言表达就是:
$$ \ln\left(\frac{y}{1-y}\right) = \boldsymbol{w}^\mathrm{T}\boldsymbol{x} + b $$
左侧的表达式被称为对数几率(Log Odds),它表示正例与反例的概率比值的自然对数。这个巧妙的转换将分类问题转化为可以用线性模型求解的回归问题。
公式推导的关键步骤
似然函数构建
逻辑回归采用极大似然估计来求解模型参数。对于二分类问题,给定样本$\boldsymbol{x}_i$,其属于正例($y_i=1$)和反例($y_i=0$)的概率分别为:
$$ p_1(\boldsymbol{x};\boldsymbol{\beta}) = \frac{e^{\boldsymbol{\beta}^\mathrm{T}\hat{\boldsymbol{x}}}}{1+e^{\boldsymbol{\beta}^\mathrm{T}\hat{\boldsymbol{x}}}} $$ $$ p_0(\boldsymbol{x};\boldsymbol{\beta}) = \frac{1}{1+e^{\boldsymbol{\beta}^\mathrm{T}\hat{\boldsymbol{x}}}} $$
其中$\boldsymbol{\beta}=(\boldsymbol{w};b)$是扩展后的参数向量,$\hat{\boldsymbol{x}}=(\boldsymbol{x};1)$是扩展后的样本向量。
交叉熵损失函数
通过极大似然估计推导得到的损失函数正是交叉熵损失:
$$ \ell(\boldsymbol{\beta}) = \sum_{i=1}^{m}\left(-y_i\boldsymbol{\beta}^{\mathrm{T}}\hat{\boldsymbol{x}}_i + \ln(1+e^{\boldsymbol{\beta}^{\mathrm{T}}\hat{\boldsymbol{x}}_i)\right) $$
这个损失函数具有良好的数学性质,是关于参数$\boldsymbol{\beta}$的凸函数,保证了梯度下降等优化算法能够找到全局最优解。详细推导过程可参考pumpkin-book官方文档的3.3.1节。
梯度下降求解
由于逻辑回归的损失函数没有闭式解,我们需要使用迭代优化算法求解。最常用的是梯度下降法,其参数更新公式为:
$$ \boldsymbol{\beta}^{t+1} = \boldsymbol{\beta}^{t} - \alpha\nabla\ell(\boldsymbol{\beta}^{t}) $$
其中$\alpha$是学习率,梯度$\nabla\ell(\boldsymbol{\beta})$的具体形式为:
$$ \nabla\ell(\boldsymbol{\beta}) = \sum_{i=1}^{m}\left(\frac{1}{1+e^{\boldsymbol{\beta}^{\mathrm{T}}\hat{\boldsymbol{x}}_i}} - y_i\right)\hat{\boldsymbol{x}}_i $$
分类阈值的科学选择
阈值对模型性能的影响
逻辑回归输出的是样本属于正例的概率,我们需要选择一个分类阈值$\theta$来确定最终类别:
- 当$y_i \geq \theta$时,预测为正例
- 当$y_i < \theta$时,预测为反例
默认阈值0.5在多数情况下适用,但在实际应用中,我们需要根据具体场景调整阈值。以下是不同阈值对模型性能的影响:
| 阈值 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| 0.5 | 一般场景 | 平衡正负例 | 对不平衡数据不友好 |
| 0.1-0.3 | 异常检测 | 减少漏检 | 误检率高 |
| 0.7-0.9 | 垃圾邮件过滤 | 减少误检 | 漏检率高 |
ROC曲线与最佳阈值
ROC曲线(Receiver Operating Characteristic Curve)是帮助我们选择最佳阈值的有力工具。它以假正例率(FPR)为横轴,真正例率(TPR)为纵轴,描述了不同阈值下模型的性能。
ROC曲线的关键指标是AUC(Area Under Curve),表示模型区分正负例的能力。AUC越接近1,模型性能越好。通过分析ROC曲线上的拐点,我们可以找到在特定业务场景下的最佳阈值。
阈值选择的实战技巧
- 业务导向:根据误判代价调整阈值。例如,在疾病诊断中,应降低阈值以减少漏诊
- 数据分布:对不平衡数据,可通过调整阈值平衡正负例的识别率
- 交叉验证:使用验证集评估不同阈值的性能,选择F1分数最高的阈值
- 动态调整:在实际应用中,可根据数据分布变化动态调整阈值
实践案例与代码实现
核心代码框架
以下是使用Python实现逻辑回归的核心代码框架,完整代码可参考pumpkin-book项目:
class LogisticRegression:
def __init__(self, learning_rate=0.01, num_iter=10000, threshold=0.5):
self.learning_rate = learning_rate
self.num_iter = num_iter
self.threshold = threshold
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.num_iter):
linear_model = np.dot(X, self.weights) + self.bias
y_pred = self.sigmoid(linear_model)
# 计算梯度
dw = (1 / n_samples) * np.dot(X.T, (y_pred - y))
db = (1 / n_samples) * np.sum(y_pred - y)
# 更新参数
self.weights -= self.learning_rate * dw
self.bias -= self.learning_rate * db
def predict_prob(self, X):
linear_model = np.dot(X, self.weights) + self.bias
return self.sigmoid(linear_model)
def predict(self, X):
y_pred_prob = self.predict_prob(X)
return [1 if i >= self.threshold else 0 for i in y_pred_prob]
阈值调优实验
我们使用UCI的乳腺癌数据集进行阈值调优实验,通过调整不同阈值观察模型性能变化:
| 阈值 | 准确率 | 精确率 | 召回率 | F1分数 |
|---|---|---|---|---|
| 0.3 | 0.91 | 0.88 | 0.97 | 0.92 |
| 0.5 | 0.94 | 0.93 | 0.96 | 0.94 |
| 0.7 | 0.93 | 0.97 | 0.89 | 0.93 |
实验结果表明,当阈值为0.5时模型的综合性能(F1分数)最佳,这与我们的理论分析一致。
总结与扩展
逻辑回归作为一种简单高效的分类算法,在实际应用中有着广泛的用途。通过本文的学习,你已经掌握了其核心原理、公式推导过程和分类阈值选择方法。
关键知识点回顾
- 逻辑回归通过Sigmoid函数将线性回归转化为分类模型
- 交叉熵损失函数是逻辑回归的核心,保证了优化的稳定性
- 梯度下降是求解逻辑回归参数的常用方法
- 分类阈值的选择需要结合业务场景和数据特点
- ROC曲线和AUC指标是评估模型性能的有力工具
进阶学习路径
- 正则化技术:学习L1和L2正则化如何解决过拟合问题
- 多分类扩展:了解One-vs-Rest和Softmax回归等多分类方法
- 特征工程:掌握特征选择和变换对逻辑回归性能的影响
- 高级优化算法:学习牛顿法、拟牛顿法等更高效的优化算法
如果你想深入学习更多机器学习算法的数学原理,推荐阅读《机器学习》(西瓜书)及其配套的pumpkin-book公式详解,里面有更多精彩内容等着你探索!
通过理论学习与实践结合,相信你一定能熟练掌握逻辑回归这一强大工具,并在实际项目中灵活应用。记住,最好的学习方法是动手实践——现在就打开pumpkin-book项目,开始你的机器学习之旅吧!
【免费下载链接】pumpkin-book 《机器学习》(西瓜书)公式详解 项目地址: https://gitcode.com/datawhalechina/pumpkin-book
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






