机器学习教程【免费下载链接】python-machine-learning-bookThe Python Machine Learning (1st edition) book code repository and info resource项目地址https://gitcode.com/gh_mirrors/py/python-machine-learning-book点击查看免费下载导读本文回答《Python Machine Learning》(第 1 版) 配套问答库中一个高频问题正则化逻辑回归的概率解释是什么我们从最大似然函数出发逐步推导对数似然、负对数似然成本函数并引入 L2 正则项最后揭示正则化在贝叶斯视角下等价于对权重施加先验分布。文中所有公式均可对照 faq/probablistic-logistic-regression.md 原文档及其配图并结合仓库中 scikit-learn 实战代码 与 从零实现的神经网络 给出实现级证据。读完你将理解为什么最大化似然能变成最小化成本为什么加了正则化就找不到全局最小值以及正则化强度参数如 scikit-learn 的C在底层到底如何影响权重。一、为什么逻辑回归需要概率解释逻辑回归之所以叫回归却常被用作分类器核心原因在于sigmoidlogistic函数输出的不是硬分类标签而是条件概率。给定特征 $\mathbf{x}$ 与权重 $\mathbf{w}$模型输出的正是 $p(y1 \mid \mathbf{x}; \mathbf{w})$。因此训练逻辑回归的过程天然是一个概率估计问题——我们不是在拟合一条分类直线而是在估计一个概率分布。这为下面的最大似然推导提供了前提。关于 sigmoid 函数为什么能输出条件概率、它与 odds几率比的关系可进一步阅读仓库中的姊妹问答 faq/logistic-why-sigmoid.md。二、最大似然函数所有样本概率的乘积假设训练集有 $n$ 个样本每个样本 $i$ 的标签为 $y^{(i)} \in {0, 1}$逻辑回归的似然函数写作$$ L(\mathbf{w}) \prod_{i1}^{n} \left[ \phi(z^{(i)}) \right]^{y^{(i)}} \left[ 1 - \phi(z^{(i)}) \right]^{1 - y^{(i)}} $$其中 $\phi$ 就是条件概率即 sigmoidlogistic函数$$ \phi(z) p(y1 \mid \mathbf{x}; \mathbf{w}) \frac{1}{1 e^{-z}} $$而 $z$ 是所谓的net input净输入一个标量$$ z \mathbf{w}^T \mathbf{x} $$理解这个乘积结构是关键当 $y^{(i)}1$ 时似然中只保留 $\phi(z^{(i)})$ 这一项我们希望它接近 1当 $y^{(i)}0$ 时只保留 $1-\phi(z^{(i)})$我们希望它接近 1。所以最大化 $L(\mathbf{w})$ 就是最大化模型在所有样本上输出正确概率的联合概率这正是一个最大似然估计MLE问题。三、从最大似然到最小化成本取对数直接最大化乘积形式的似然函数在求导时很不方便因此先取对数把乘积变成求和这就是原文档强调的 addition trick——在梯度下降 / 随机梯度下降求偏导时对每一项独立求导再相加数学上轻松很多$$ l(\mathbf{w}) \log L(\mathbf{w}) \sum_{i1}^{n} \left[ y^{(i)} \log \phi(z^{(i)}) \left(1 - y^{(i)}\right) \log \left(1 - \phi(z^{(i)})\right) \right] $$由于我们讨论的是成本cost习惯上要把最大化翻转成最小化于是取负号得到绝大多数教材中熟悉的逻辑回归成本函数$$ J(\mathbf{w}) \sum_{i1}^{n} \left[ -y^{(i)} \log \phi(z^{(i)}) - \left(1 - y^{(i)}\right) \log \left(1 - \phi(z^{(i)})\right) \right] $$这就是负对数似然NLL成本函数。它与成本函数 / 损失函数概念的辨析可参考 faq/cost-vs-loss.md。仓库中的 code/ch12/neuralnet.py 给出了这一公式的逐行实现_cost方法第 193–198 行term1 -y_enc * (np.log(output)) term2 (1.0 - y_enc) * np.log(1.0 - output) cost np.sum(term1 - term2) L1_term self._L1_reg(self.l1, w1, w2) L2_term self._L2_reg(self.l2, w1, w2) cost cost L1_term L2_term其中y_enc是 one-hot 编码的标签矩阵output是前向传播_feedforward输出的 sigmoid 激活值该文件同时实现了 L1、L2 正则项恰好对应本文下一节的讨论。此外同文件中的_sigmoid方法第 102–110 行特意使用scipy.special.expit而非1.0 / (1.0 np.exp(-z))注释说明这是为了避免极小输入值导致的溢出错误——这是实现 sigmoid 时一个非常实用的工程细节。四、无正则化向全局成本最小值无节制地增大权重现在想象我们在一个二维数据集上把成本 $J(\mathbf{w})$ 画成关于两个权重 $w_1$、$w_2$ 的函数见上文第一张等高线图。对于无正则化的成本存在一个全局成本最小值图中椭圆中心的圆点对应某一组特定的 $w_1$、$w_2$ 组合。关键点在于为了到达这个全局最小值模型会把权重增大到有必要那么大的程度——特征越多、样本噪声越大权重就越可能被推向极端值从而产生过拟合。这正是引入正则化的动机。关于过拟合的表现与学习曲线分析可参见 faq/overfitting.md。五、L2 正则化成本惩罚与可行域约束现在给成本函数加上一个正则项例如 L2$$ J(\mathbf{w}) \left[ \sum_{i1}^{n} -y^{(i)} \log \phi(z^{(i)}) - \left(1 - y^{(i)}\right) \log \left(1 - \phi(z^{(i)})\right) \right] \lambda |\mathbf{w}|_2^2 $$其中 $|\mathbf{w}|_2^2 \sum_j w_j^2$ 是权重向量的平方欧几里得范数。它的含义非常直观每把某个权重推大一点成本就会因为 $\lambda |\mathbf{w}|_2^2$ 而额外增加因此我们无法再到达原来的全局最小值——那里虽然数据拟合项最小但权重的惩罚太大我们被迫在拟合数据与保持权重较小之间寻找甜蜜点sweet spot即在上文第二张等高线图中被以原点为中心的圆L2 范数约束所限制的区域内的成本最小点。图中圆球的大小由额外的超参数 $\lambda$ 控制$\lambda$ 越大惩罚越重圆越小最优解越被拉向原点权重整体越小。仓库中 code/ch12/neuralnet.py 的_L2_reg与_L1_reg方法第 163–170 行直接实现了这两个正则项def _L2_reg(self, lambda_, w1, w2): Compute L2-regularization cost return (lambda_/2.0) * (np.sum(w1[:, 1:] ** 2) np.sum(w2[:, 1:] ** 2)) def _L1_reg(self, lambda_, w1, w2): Compute L1-regularization cost return (lambda_/2.0) * (np.abs(w1[:, 1:]).sum() np.abs(w2[:, 1:]).sum())两个细节值得注意其一权重矩阵切片从第 1 列开始[:, 1:]偏置单元bias unit不参与正则化——偏置只平移决策边界不直接导致过拟合因此标准的 L2/L1 实现都将其排除在外其二梯度更新时_get_gradient方法第 238–241 行对非偏置权重分别加上self.l2 * wL2 的导数 $2\lambda w$ 与系数合并与self.l1 * np.sign(w)L1 的次梯度与成本函数中的正则项严格自洽。六、scikit-learn 实战C参数与权重收缩路径仓库的 code/optional-py-scripts/ch03.py 展示了 scikit-learn 中的对应操作。第 193 行先以弱正则化训练了一个逻辑回归lr LogisticRegression(C1000.0, random_state0) lr.fit(X_train_std, y_train)然后在 Tackling overfitting via regularization 一节第 213–230 行对正则化强度做了系统扫描weights, params [], [] for c in np.arange(-5.0, 5.0): lr LogisticRegression(C10**c, random_state0) lr.fit(X_train_std, y_train) weights.append(lr.coef_[1]) params.append(10**c)这段代码遍历 $C 10^c$$c$ 从 -5 到 5记录每个模型在鸢尾花数据集上对 petal length 与 petal width 两个特征的权重系数最后以 $C$ 为横轴对数刻度绘制权重系数随正则化强度变化的路径图。运行结果呈现清晰的规律随着 $C$ 减小正则化增强权重系数不断向 0 收缩反之 $C$ 越大权重越接近无正则化时的取值。这也印证了 scikit-learn 中C的语义——C是正则化强度的倒数C越小lambda惩罚越重。完整的实验代码与图表可在 code/ch03/ch03.ipynb 中复现。七、贝叶斯视角正则化 给权重加先验原文档最后给出了一个极具启发性的总结加入正则项就仿佛给权重施加了一个先验prior。回顾整个流程MLE在给定训练数据 $D$ 的条件下最大化 $P(D \mid \mathbf{w})$即最大化似然MAP最大后验估计最大化 $P(\mathbf{w} \mid D) \propto P(D \mid \mathbf{w}) , P(\mathbf{w})$其中 $P(\mathbf{w})$ 是权重的先验。如果我们给每个权重施加一个均值为 0 的高斯先验那么对数后验里会出现 $\sum_j w_j^2$ 项——这正是 L2 正则项同理拉普拉斯Laplace先验对应 L1 正则项。所以无正则化我们最大化给定训练数据的似然有正则化我们在额外信息偏置先验的约束下最大化似然。换句话说正则化逻辑回归本质上是一个 MAP 估计它不仅信任数据还信任权重不应该太大这一先验信念。这个观点同样适用于仓库中 code/ch12/neuralnet.py 的神经网络实现——其l1、l2两个构造参数见该文件第 24–28 行的文档字符串Lambda value for L1-regularization. No regularization if l10.0与本文公式中的 $\lambda$ 一一对应你可以在 code/ch12/ch12.ipynb 中直接实验不同 $\lambda$ 对训练成本曲线的影响。八、延伸阅读原问答入口faq/probablistic-logistic-regression.md以及 FAQ 总目录第 87 行收录了本文主题sigmoid 函数为何能输出条件概率faq/logistic-why-sigmoid.mdL2 正则化对决策边界的可视化对比faq/regularized-logistic-regression-performance.md梯度下降 / 随机梯度下降 / 闭式解的区别faq/closed-form-vs-gd.md成本函数与损失函数的概念辨析faq/cost-vs-loss.md过拟合及其缓解策略总览faq/overfitting.md。一句话总结正则化逻辑回归的概率解释可以浓缩为一条推导链——sigmoid 输出条件概率 → 构造所有样本的似然乘积 → 取对数并取负得到成本函数 → 加上权重范数惩罚L2→ 在贝叶斯视角下等价于对权重施加高斯先验的 MAP 估计而 $\lambda$或 scikit-learn 中与之成反比的C正是控制这个先验强度的旋钮。赞分享机器学习教程【免费下载链接】python-machine-learning-bookThe Python Machine Learning (1st edition) book code repository and info resource项目地址https://gitcode.com/gh_mirrors/py/python-machine-learning-book点击查看免费下载相关推荐RPG-DiffusionMaster社区贡献指南如何参与项目开发与功能扩展RPG DiffusionMaster社区贡献指南如何参与项目开发与功能扩展 RPG DiffusionMaster是一个基于多模态LLM的文本到图像生成框架LingBot-Map流式3D重建的边界在哪里推理范围与状态重置深度讨论LingBot Map流式3D重建的边界在哪里推理范围与状态重置深度讨论 LingBot Map ECCV 2026 Oral是一个前馈式流式3D重建模型人工智能计算机视觉深度学习基础模型3D建模使用CVXPY实现L1正则化逻辑回归的完整指南使用CVXPY实现L1正则化逻辑回归的完整指南 还在为高维数据下的逻辑回归过拟合问题而烦恼本文将为你提供使用CVXPY实现L1正则化逻辑回归的完整解决方案从科学计算上一篇零基础搞定SpiderFoot报告定制3步打造专业HTML/PDF安全审计文档下一篇gh_mirrors/ohmy/ohmyzsh社区贡献者访谈核心开发者的经验分享创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
