
Michael Bowles
在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知所措。本书从算法和Python语言实现的角度,帮助读者认识机器学习。本书专注于两类核心的“算法族”,即惩罚线性回归和集成方法,并通过代码实例来展示所讨论的算法的使用原则。全书共分为7章,详细讨论了预测模型的两类核心算法、预测模型的构建、惩罚线性回归和集成方法的具体应用和实现。本书主要针对想提高机器学习技能的Python开发人员,帮助他们解决某一特定的项目或是提升相关的技能。
《Python机器学习:预测分析核心算法》拆解 作者:[美]Michael Bowles 一、一句话概括 可靠的预测模型不需要从大量算法中盲目挑选,而应先理解数据和评价指标,再重点掌握两类覆盖面广的核心方法:以正则化控制复杂度的线性模型,以及通过组合多个弱模型提高性能的集成方法。 二、核心逻辑 本书围绕两类算法族展开: 1. 惩罚线性回归:在线性模型中加入正则化,通过限制参数控制过拟合,并完成特征选择。2. 集成方法:组合多棵决策树或多个模型,降低方差或逐步修正错误。 全书的学习路径是: 理解问题和数据 → 建立评价方法 → 平衡模型复杂度与数据规模 → 学习惩罚线性模型 → 学习树与集成模型 → 用Python解决回归、二分类和多分类问题 作者希望读者掌握可迁移的建模原则,而不是只会调用某个软件接口。 三、核心内容 1. 预测建模从明确问题类型开始 机器学习任务首先要判断目标是什么。 常见监督学习问题包括: 回归:预测连续数值,如价格、年龄和评分;二分类:在两个类别中判断,如水雷或岩石;多分类:在多个类别中选择,如玻璃种类。 不同任务需要不同的损失函数、输出形式和评价指标。 如果目标定义错误,后续算法再复杂也无法产生有意义的结果。 2. 理解数据比立即训练模型更重要 面对新数据集,应先检查: 样本数量;特征数量;数据类型;缺失值;异常值;特征分布;目标分布;特征与目标的关系;特征之间的相关性;类别是否平衡。 可视化能够帮助发现偏态、离群点、类别重叠和非线性关系。 建模前的探索不是形式步骤,而是选择算法和预处理方式的依据。 3. 数据的行列结构决定建模方式 典型监督学习数据可以表示为特征矩阵和目标向量。 每一行代表一个样本,每一列代表一个属性,目标则是模型需要预测的结果。 需要特别注意: 数字编号不一定是真正数值特征;类别变量需要编码;不同尺度可能影响线性模型;高相关特征可能造成参数不稳定;样本数少而特征多时,过拟合风险更高。 数据表示本身就是模型假设的一部分。 4. 必须划分训练、验证与测试数据 模型需要在训练数据上学习,在验证数据上选择超参数,最后在未参与任何选择的测试数据上评价。 如果反复根据测试集结果修改模型,测试集就已经成为训练过程的一部分,最终成绩会被高估。 样本较少时,可以使用交叉验证,让不同数据轮流作为验证集,提高评价稳定性。 所有数据处理步骤也必须只在训练数据中拟合,避免数据泄漏。 5. 模型选择是偏差与方差的权衡 简单模型可能无法表达真实规律,产生较高偏差;复杂模型容易适应训练噪声,产生较高方差。 随着模型复杂度增加: 训练误差通常持续下降;验证误差先下降,再可能上升;模型对数据扰动更加敏感;解释和维护成本也会上升。 最优模型不是训练误差最低的模型,而是在未见数据上表现最好、复杂度又合理的模型。 6. 评价指标必须反映使用目标 回归任务常用: 均方误差;均方根误差;平均绝对误差;决定系数。 分类任务常用: 准确率;精确率;召回率;F1值;ROC曲线和AUC;混淆矩阵。 类别不平衡时,准确率可能误导。例如,正例只有1%,全部预测为负也有99%准确率,却毫无价值。 指标选择应结合误报和漏报的实际成本。 7. 线性模型是重要基线 线性回归把预测表示为特征的加权和。 它具有训练快、解释清楚和容易扩展等优点,也能作为复杂模型的性能基准。 线性不等于简单无用。通过添加交互项、非线性变换和合适特征,线性模型可以解决许多现实问题。 其主要风险包括多重共线性、异常值敏感和高维过拟合。 8. 正则化通过惩罚参数控制复杂度 惩罚线性回归在原始损失函数中加入参数惩罚。 基本思想是: 模型既要拟合数据,也不能让参数无限增大 惩罚强度由超参数控制: 惩罚太弱,模型可能过拟合;惩罚太强,模型可能欠拟合;合适强度需要通过验证或交叉验证选择。 正则化相当于在准确性和简单性之间建立明确权衡。 9. 岭回归使用L2惩罚稳定模型 岭回归对参数平方和进行惩罚。 它会把系数压缩到较小值,但通常不会让系数完全变为零。 在特征高度相关时,普通线性回归的参数可能非常不稳定。岭回归通过限制系数幅度,提高模型对数据变化的稳定性。 它适合多数特征可能都具有一定作用、但需要防止参数过大的场景。 10. Lasso使用L1惩罚实现稀疏选择 Lasso对参数绝对值之和进行惩罚。 这种惩罚会让部分系数变为零,因此同时完成拟合和特征选择。 它适合特征很多、但只有部分特征真正重要的情况。 当多个特征高度相关时,Lasso可能只随机保留其中一个,导致选择结果不稳定。此时需要结合业务知识和重复验证解释结果。 11. Elastic Net结合L1与L2 Elastic Net同时使用L1和L2惩罚。 它既能够产生稀疏解,又能缓解Lasso在相关特征中的不稳定。 模型需要调整两个方面: 总体正则化强度;L1和L2的混合比例。 超参数增加意味着必须使用更加严格的交叉验证,避免在验证集上过度调参。 12. 惩罚线性方法可以扩展到分类 二分类可以使用逻辑回归,把线性组合通过Sigmoid转换为类别概率。 对逻辑回归加入L1、L2或Elastic Net正则化,可以在高维分类任务中控制复杂度。 多分类问题则可以采用: 一对多策略;多项逻辑回归;多个二分类器组合。 线性分类器在特征维度高、样本较稀疏时往往非常有竞争力。 13. 决策树用递归切分形成预测规则 决策树反复选择特征和阈值,把样本分到更纯的子节点。 它能够自然表达非线性和特征交互,也不太依赖特征缩放。 树的主要问题是高方差:训练数据稍有变化,树结构可能明显不同。 限制深度、叶节点样本数和剪枝可以控制复杂度,但单棵树的性能通常不如集成模型。 14. Bagging通过平均降低方差 Bagging从原训练集进行有放回抽样,得到多个训练子集,在每个子集上训练一个模型。 回归任务对多个预测取平均,分类任务则投票。 如果各模型的错误不完全相同,平均后可以抵消部分波动。 Bagging特别适合决策树等高方差模型。其核心不是让每个模型更强,而是让模型之间存在足够差异。 15. 随机森林进一步降低树之间的相关性 随机森林在Bagging基础上增加随机特征选择。 每次节点分裂只从一部分特征中寻找最佳切分,避免少数强特征在所有树中占据主导。 这样不同树之间差异更大,集成后的方差更低。 随机森林通常具有: 较强基线性能;对非线性和交互建模能力;对预处理要求较低;可估计特征重要性;能处理较多特征。 但模型规模可能较大,特征重要性也可能受到高基数和相关变量影响。 16. 梯度提升通过逐步修正错误建立强模型 梯度提升按顺序训练多个弱学习器。 每个新模型重点拟合当前集成仍未处理好的残差或梯度方向,最终将多个小模型相加。 与Bagging并行训练不同,Boosting是逐步依赖的: 当前模型 → 分析错误 → 新模型修正错误 → 加入集成 学习率、树数量和树深度共同控制模型复杂度。 提升模型性能强,但更容易因调参不当而过拟合。 17. Bagging与Boosting解决不同问题 Bagging主要降低方差,让不稳定模型通过平均变得稳定。 Boosting主要降低偏差,逐步增强模型表达能力。 简单比较如下: Bagging可并行训练,调参相对容易;Boosting顺序训练,通常具有更高拟合能力;随机森林对噪声较稳健;梯度提升对学习率和树深度更敏感;两者都需要通过验证集确认泛化表现。 算法选择应取决于数据和任务,而不是固定偏好。 18. 特征重要性不等于因果关系 树模型和正则化线性模型可以提供特征权重或重要性。 这些结果说明某个特征对当前数据中的预测有帮助,却不能证明它会导致目标变化。 重要性还会受到: 特征相关性;编码方式;数据分布;模型结构;缺失模式;潜在混杂因素。 模型解释适合用于理解预测,但因果决策需要额外设计和证据。 19. Python代码的价值在于建立完整流程 本书通过声纳水雷、鲍鱼年龄、红酒口感和玻璃分类等案例,展示从读取数据到模型比较的全过程。 实践重点包括: 数据检查;可视化;特征和目标分离;训练测试划分;正则化路径;交叉验证;模型训练;指标比较;结果解释。 代码只是方法的载体。读者应理解每个步骤为什么存在,而不是只复制最终程序。 20. 本书的工具和代码具有时代性 本书主要使用较早期的Python机器学习工具和编程方式,部分接口、数据处理习惯和库版本可能已经变化。 今天可以使用更成熟的scikit-learn流水线、交叉验证、预处理和模型解释工具。 但其核心方法仍未过时: 先理解数据;建立基线;严格划分数据;通过正则化控制复杂度;比较线性与树模型;使用交叉验证选择超参数;让指标匹配实际目标。 四、本书最值得关注的核心观点 本书最值得关注的观点是: 机器学习的关键不是拥有最多算法,而是理解两种控制复杂度的基本思想:约束单个模型,以及组合多个模型。 惩罚线性回归通过限制参数,让单个模型避免过度拟合;集成方法则让多个模型互相抵消错误或逐步修正不足。 二者代表了两条非常普遍的路线: 通过偏好更简单的解获得稳定性;通过模型多样性和组合获得更强预测能力。 掌握这两类思想后,面对新算法时就能看清其核心是在怎样控制偏差、方差和复杂度。 五、一段话总结 《Python机器学习:预测分析核心算法》没有罗列大量模型,而是围绕惩罚线性回归和集成方法两类核心算法,建立从数据理解、问题分类、评价指标到模型选择的完整预测流程。岭回归通过L2惩罚稳定相关特征的参数,Lasso通过L1惩罚产生稀疏解,Elastic Net则兼顾二者;Bagging利用多个模型平均降低方差,随机森林通过随机特征进一步增加树的多样性,梯度提升则按顺序修正已有模型的错误。全书通过回归、二分类和多分类案例强调,模型训练误差不是最终目标,真正重要的是严格划分数据、用交叉验证选择复杂度,并让评价指标反映现实中的错误成本。虽然代码接口具有年代感,但正则化、偏差—方差权衡和集成学习的核心思想仍是现代预测分析的重要基础。
读此书以前,需要对统计学、计算方法和Python编程语言有一些基本了解。作者对惩罚性回归分析和集成方法的原理解释得比较清楚,但例子和文字枯燥乏味,感觉像学术论文,适合长期失眠患者阅读
读的不是太懂,代码排版有问题,影响阅读,详细的公式推导也没有,感觉有点跳跃,算法介绍的比较多,但感觉不适合初学者。
重复系数>5 (有些code可能重复了20遍),肤浅系数0.3(只知道调用,却不加解释),灌输的几个概念我还要去看其他书理解。
外国人写的书果然浅显易懂,就是有些太浅了,只适合入门
一开始实在提不起兴趣来读.半个月偶尔翻一翻才勉强看完前三章。第四章开始看得很是过瘾,三天不到翻完了全本。 缺点: 这书的排版是个bug,官网附加的代码是更新过好几遍的,看的费劲。后来干脆懒得看code跟图了。 优点: 特别适合总结跟查漏补缺! 适合已经开始做数据分析,做过一些分析,写过一些代码,但是总是懵逼,不知道怎么下手的人,不得要领的人。 实用性很强,实战性也很强,总结性非常强。什么情况用什么算法,有什么缺陷,怎么解决,一清二楚。但凡是重点的,绝对会在合适的时机再深入浅出一下,还章节前概括,章节末尾总结,跟论文似的。 看到后面觉得,这作者挺实在,本书内容跟介绍写的一模一样。
这翻页的代码也太多了,个人感觉讲述特征处理、性能分析、模型选择等内容不多,尤其是后面集成学习部分都把Scikit-learn接口搬上来了
代码部分不是很简洁,可以自己修改,讲的挺不错的
只看了到了第二章 好多辅助连接都打不开[撇嘴]