《Python机器学习(原书第3版)》自第1版出版以来,备受广大读者欢迎。与同类书相比,本书除了介绍如何用Python和基于Python的机器学习软件库进行实践外,还对机器学习概念的必要细节进行讨论,同时对机器学习算法的工作原理、使用方法以及如何避免掉入常见的陷阱提供直观且翔实的解释,是Python机器学习入门必读之作。它的内容涵盖了众多高效Python库,包括scikit-learn、Keras和TensorFlow等,系统性地梳理和分析了各种经典算法,并通过Python语言以具体代码示例的方式深入浅出地介绍了各种算法的应用,还给出了从情感分析到神经网络的一些实践技巧,这些内容能使你快速解决你和你的团队面临的一些重要问题。
封面图
目录
- 译者序
- 前言
- 作者简介
- 审校者简介
- 第1章赋予计算机从数据中学习的能力1
- 1.1构建能把数据转换为知识的智能机器1
- 1.2三种不同类型的机器学习1
- 1.2.1用监督学习预测未来2
- 1.2.2用强化学习解决交互问题3
- 1.2.3用无监督学习发现隐藏的结构4
- 1.3基本术语与符号4
- 1.3.1本书中使用的符号和约定5
- 1.3.2机器学习的术语6
- 1.4构建机器学习系统的路线图6
- 1.4.1预处理——整理数据6
- 1.4.2训练和选择预测模型7
- 1.4.3评估模型并对未曾谋面的数据进行预测8
- 1.5将Python用于机器学习8
- 1.5.1利用Python Package Index安装Python及其他软件包8
- 1.5.2采用Anaconda Python发行版和软件包管理器8
- 1.5.3用于科学计算、数据科学和机器学习的软件包9
- 1.6本章小结9
- 第2章训练简单的机器学习分类算法10
- 2.1人工神经元——机器学习的早期历史10
- 2.1.1人工神经元的正式定义11
- 2.1.2感知器学习规则12
- 2.2用Python实现感知器学习算法14
- 2.2.1面向对象的感知器API14
- 2.2.2在鸢尾花数据集上训练感知器模型16
- 2.3自适应线性神经元和学习收敛20
- 2.3.1通过梯度下降最小化代价函数21
- 2.3.2用Python实现Adaline22
- 2.3.3通过特征缩放改善梯度下降26
- 2.3.4大规模机器学习与随机梯度下降27
- 2.4本章小结31
- 第3章scikit-learn机器学习分类器32
- 3.1选择分类算法32
- 3.2了解scikit-learn的第一步——训练感知器32
- 3.3基于逻辑回归的分类概率建模37
- 3.3.1逻辑回归与条件概率37
- 3.3.2学习逻辑代价函数的权重39
- 3.3.3将Adaline实现转换为一个逻辑回归算法41
- 3.3.4用scikit-learn训练逻辑回归模型44
- 3.3.5通过正则化解决过拟合问题46
- 3.4使用支持向量机最大化分类间隔48
- 3.4.1对分类间隔最大化的直观认识48
- 3.4.2用松弛变量解决非线性可分问题50
- 3.4.3其他的scikit-learn实现51
- 3.5用核支持向量机求解非线性问题51
- 3.5.1处理线性不可分数据的核方法52
- 3.5.2利用核技巧发现高维空间的分离超平面53
- 3.6决策树学习56
- 3.6.1最大化信息增益——获得最大收益56
- 3.6.2构建决策树59
- 3.6.3多个决策树的随机森林组合62
- 3.7k-近邻——一种惰性学习算法64
- 3.8本章小结66
- 第4章构建良好的训练数据集——数据预处理67
- 4.1处理缺失数据67
- 4.1.1识别数据中的缺失值67
- 4.1.2删除有缺失值的训练样本或特征68
- 4.1.3填补缺失值69
- 4.1.4了解scikit-learn估计器API69
- 4.2处理类别数据70
- 4.2.1用pandas实现类别数据的编码70
- 4.2.2映射序数特征71
- 4.2.3为分类标签编码71
- 4.2.4为名义特征做独热编码72
- 4.3把数据集划分为独立的训练数据集和测试数据集74
- 4.4保持相同的特征缩放76
- 4.5选择有意义的特征78
- 4.5.1L1和L2正则化对模型复杂度的惩罚78
- 4.5.2L2正则化的几何解释78
- 4.5.3L1正则化的稀疏解决方案79
- 4.5.4序列特征选择算法82
- 4.6用随机森林评估特征的重要性86
- 4.7本章小结88
- 第5章通过降维压缩数据89
- 5.1用主成分分析实现无监督降维89
- 5.1.1主成分分析的主要步骤89
- 5.1.2逐步提取主成分90
- 5.1.3总方差和解释方差92
- 5.1.4特征变换93
- 5.1.5用scikit-learn实现主成分分析95
- 5.2基于线性判别分析的监督数据压缩97
- 5.2.1主成分分析与线性判别分析97
- 5.2.2线性判别分析的内部工作原理98
- 5.2.3计算散布矩阵98
- 5.2.4为新特征子空间选择线性判别100
- 5.2.5将样本投影到新的特征空间102
- 5.2.6用scikit-learn实现LDA103
- 5.3非线性映射的核主成分分析104
- 5.3.1核函数与核技巧104
- 5.3.2用Python实现核主成分分析107
- 5.3.3投影新的数据点112
- 5.3.4scikit-learn的核主成分分析115
- 5.4本章小结116
- 第6章模型评估和超参数调优的最佳实践117
- 6.1用流水线方法简化工作流117
- 6.1.1加载威斯康星乳腺癌数据集117
- 6.1.2在流水线中集成转换器和估计器118
- 6.2使用k折交叉验证评估模型性能120
- 6.2.1holdout方法120
- 6.2.2k折交叉验证121
- 6.3用学习和验证曲线调试算法123
- 6.3.1用学习曲线诊断偏差和方差问题124
- 6.3.2用验证曲线解决过拟合和欠拟合问题126
- 6.4通过网格搜索调优机器学习模型127
- 6.4.1通过网格搜索调优超参数128
- 6.4.2通过嵌套式交叉验证选择算法129
- 6.5了解不同的性能评估指标130
- 6.5.1分析混淆矩阵130
- 6.5.2优化分类模型的精度和召回率131
- 6.5.3绘制ROC曲线133
- 6.5.4多元分类评分指标135
- 6.5.5处理类不均衡问题135
- 6.6本章小结137
- 第7章组合不同模型的集成学习138
- 7.1集成学习138
- 7.2通过多数票机制组合分类器140
- 7.2.1实现一个简单的多数票分类器141
- 7.2.2用多数票原则进行预测145
- 7.2.3评估和优化集成分类器147
- 7.3bagging——基于bootstrap样本构建集成分类器151
- 7.3.1bagging简介151
- 7.3.2应用bagging对葡萄酒数据集中的样本分类152
- 7.4通过自适应boosting提高弱学习机的性能155
- 7.4.1boosting的工作原理156
- 7.4.2用scikit-learn实现AdaBoost158
- 7.5本章小结161
- 第8章用机器学习进行情感分析162
- 8.1为文本处理预备好IMDb电影评论数据162
- 8.1.1获取电影评论数据集162
- 8.1.2把电影评论数据集预处理成更方便的格式163
- 8.2词袋模型介绍164
- 8.2.1把单词转换成特征向量164
- 8.2.2通过词频-逆文档频率评估单词相关性166
- 8.2.3清洗文本数据167
- 8.2.4把文档处理成令牌168
- 8.3训练用于文档分类的逻辑回归模型170
- 8.4处理更大的数据集——在线算法和核外学习172
- 8.5用潜在狄利克雷分配实现主题建模174
- 8.5.1使用LDA分解文本文档175
- 8.5.2scikit-learn中的LDA175
- 8.6本章小结178
- 第9章将机器学习模型嵌入Web应用179
- 9.1序列化拟合的scikit-learn估计器179
- 9.2搭建SQLite数据库存储数据181
- 9.3用Flask开发Web应用183
- 9.3.1第一个Flask Web应用183
- 9.3.2表单验证与渲染185
- 9.4将电影评论分类器转换为Web应用189
- 9.4.1文件与文件夹——研究目录树190
- 9.4.2实现主应用app.py190
- 9.4.3建立评论表单192
- 9.4.4创建结果页面模板193
- 9.5在公共服务器上部署Web应用195
- 9.5.1创建PythonAnywhere账户195
- 9.5.2上传电影分类器应用195
- 9.5.3更新电影分类器196
- 9.6本章小结198
- 第10章用回归分析预测连续目标变量199
- 10.1线性回归简介199
- 10.1.1简单线性回归199
- 10.1.2多元线性回归200
- 10.2探索住房数据集200
- 10.2.1加载住房数据200
- 10.2.2可视化数据集的重要特点202
- 10.2.3用相关矩阵查看关系203
- 10.3普通最小二乘线性回归模型的实现205
- 10.3.1用梯度下降方法求解回归参数205
- 10.3.2通过scikit-learn估计回归模型的系数207
- 10.4利用RANSAC拟合鲁棒回归模型209
- 10.5评估线性回归模型的性能211
- 10.6用正则化方法进行回归213
- 10.7将线性回归模型转换为曲线——多项式回归214
- 10.7.1用scikit-learn增加多项式项214
- 10.7.2为住房数据集中的非线性关系建模216
- 10.8用随机森林处理非线性关系218
- 10.8.1决策树回归218
- 10.8.2随机森林回归219
- 10.9本章小结221
- 第11章用聚类分析处理无标签数据223
- 11.1用k-均值进行相似性分组223
- 11.1.1用scikit-learn实现k-均值聚类223
- 11.1.2k-均值++——更聪明地设置初始集群质心的方法226
- 11.1.3硬聚类与软聚类227
- 11.1.4用肘部方法求解最优集群数228
- 11.1.5通过轮廓图量化聚类质量229
- 11.2把集群组织成层次树233
- 11.2.1以自下而上的方式聚类233
- 11.2.2在距离矩阵上进行层次聚类234
- 11.2.3热度图附加树状图236
- 11.2.4通过scikit-learn进行凝聚聚类238
- 11.3通过DBSCAN定位高密度区域238
- 11.4本章小结242
- 第12章从零开始实现多层人工神经网络243
- 12.1用人工神经网络建立复杂函数模型243
- 12.1.1单层神经网络回顾244
- 12.1.2多层神经网络体系结构简介245
- 12.1.3利用正向传播激活神经网络247
- 12.2识别手写数字249
- 12.2.1获取并准备MNIST数据集249
- 12.2.2实现一个多层感知器254
- 12.3训练人工神经网络262
- 12.3.1逻辑代价函数的计算262
- 12.3.2理解反向传播264
- 12.3.3通过反向传播训练神经网络265
- 12.4关于神经网络的收敛性267
- 12.5关于神经网络实现的最后几句话268
- 12.6本章小结268
- 第13章用TensorFlow并行训练神经网络269
- 13.1TensorFlow与模型训练的性能269
- 13.1.1性能挑战269
- 13.1.2什么是TensorFlow270
- 13.1.3如何学习TensorFlow271
- 13.2学习TensorFlow的第一步271
- 13.2.1安装TensorFlow271
- 13.2.2在TensorFlow中创建张量272
- 13.2.3对张量形状和数据类型进行操作273
- 13.2.4对张量进行数学运算273
- 13.2.5拆分、堆叠和连接张量275
- 13.3用TensorFlow的Dataset API构建输入流水线276
- 13.3.1用现存张量创建TensorFlow的数据集276
- 13.3.2把两个张量整合成一个联合数据集277
- 13.3.3洗牌、批处理和重复278
- 13.3.4从本地磁盘的文件创建数据集280
- 13.3.5从tensorflow_datasets获取可用的数据集282
- 13.4在TensorFlow中构建神经网络模型286
- 13.4.1TensorFlow Keras API(tf.keras)287
- 13.4.2构建线性回归模型287
- 13.4.3通过.compile()和.fit()方法训练模型291
- 13.4.4在鸢尾花数据集上构建多层分类感知器291
- 13.4.5在测试数据集上评估训练后的模型294
- 13.4.6保存并重新加载训练后的模型294
- 13.5选择多层神经网络的激活函数295
- 13.5.1关于逻辑函数的回顾295
- 13.5.2在多元分类中调用softmax函数评估分类概率296
- 13.5.3利用双曲正切拓宽输出范围297
- 13.5.4修正线性单元激活函数299
- 13.6本章小结300
- 第14章深入探讨TensorFlow的工作原理301
- 14.1TensorFlow的主要功能301
- 14.2TensorFlow的计算图:迁移到TensorFlow v2302
- 14.2.1了解TensorFlow的计算图302
- 14.2.2在TensorFlow v1.x中创建计算图302
- 14.2.3将计算图迁移到TensorFlow v2303
- 14.2.4在TensorFlow v1.x中将输入数据加载到模型304
- 14.2.5在TensorFlow v2中将输入数据加载到模型304
- 14.2.6通过函数修饰器提高计算性能305
- 14.3用于存储和更新模型参数的TensorFlow变量对象306
- 14.4通过自动微分和GradientTape计算梯度309
- 14.4.1针对可训练变量计算损失的梯度309
- 14.4.2针对不可训练张量计算梯度310
- 14.4.3保留用于多个梯度计算的资源311
- 14.5通过Keras API简化通用体系结构的实现311
- 14.5.1解决XOR分类问题313
- 14.5.2用Keras的函数式API灵活建模317
- 14.5.3基于Keras的Model类建模318
- 14.5.4编写自定义Keras层318
- 14.6TensorFlow估计器321
- 14.6.1使用特征列322
- 14.6.2带预制估计器的机器学习325
- 14.6.3用估计器进行MNIST手写数字分类328
- 14.6.4基于现有Keras模型创建自定义估计器329
- 14.7本章小结331
- 第15章用深度卷积神经网络为图像分类332
- 15.1构成卷积神经网络的模块332
- 15.1.1理解CNN与特征层次332
- 15.1.2离散卷积计算334
- 15.1.3子采样层340
- 15.2构建卷积神经网络341
- 15.2.1处理多个输入或者颜色通道341
- 15.2.2通过dropout正则化神经网络344
- 15.2.3分类过程中的损失函数346
- 15.3用TensorFlow实现深度卷积神经网络347
- 15.3.1多层卷积神经网络的体系结构348
- 15.3.2数据加载和预处理348
- 15.3.3用TensorFlow的Keras API实现卷积神经网络模型349
- 15.4用卷积神经网络根据人脸图像进行性别分类353
- 15.4.1加载CelebA数据集354
- 15.4.2图像转换和数据扩增354
- 15.4.3训练基于卷积神经网络的性别分类器359
- 15.5本章小结363
- 第16章用循环神经网络为序列数据建模364
- 16.1序列数据介绍364
- 16.1.1序列数据建模——顺序很重要364
- 16.1.2序列数据的表达365
- 16.1.3不同类别的序列建模365
- 16.2循环神经网络序列建模366
- 16.2.1了解循环神经网络的循环机制366
- 16.2.2在循环神经网络中计算激活值367
- 16.2.3隐藏循环与输出循环369
- 16.2.4学习长程交互面临的挑战371
- 16.2.5长短期记忆单元372
- 16.3用TensorFlow实现循环神经网络序列建模374
- 16.3.1项目1:对IMDb电影评论进行情感分析374
- 16.3.2项目2:用TensorFlow实现字符级语言建模385
- 16.4用转换器模型理解语言394
- 16.4.1了解自注意力机制394
- 16.4.2多头注意力和转换器块396
- 16.5本章小结397
- 第17章用生成对抗网络合成新数据398
- 17.1生成对抗网络介绍398
- 17.1.1自编码器398
- 17.1.2用于合成新数据的生成模型400
- 17.1.3用GAN生成新样本401
- 17.1.4理解GAN模型中生成器和判别器网络的损失函数402
- 17.2从零开始实现GAN403
- 17.2.1用谷歌Colab训练GAN模型403
- 17.2.2实现生成器和判别器网络405
- 17.2.3定义训练数据集408
- 17.2.4训练GAN模型409
- 17.3用卷积和Wasserstein GAN提高合成图像的质量415
- 17.3.1转置卷积416
- 17.3.2批归一化417
- 17.3.3实现生成器和判别器419
- 17.3.4两个分布之间相异度的度量423
- 17.3.5在GAN实践中使用EM距离426
- 17.3.6梯度惩罚426
- 17.3.7实现WGAN-GP来训练DCGAN模型427
- 17.3.8模式坍塌429
- 17.4其他的GAN应用431
- 17.5本章小结432
- 第18章用于复杂环境决策的强化学习433
- 18.1概述——从经验中学习433
- 18.1.1了解强化学习433
- 18.1.2定义强化学习系统的智能体环境接口434
- 18.2RL的理论基础435
- 18.2.1马尔可夫决策过程435
- 18.2.2马尔可夫决策过程的数学公式436
- 18.2.3RL术语:回报、策略和价值函数438
- 18.2.4用贝尔曼方程动态编程440
- 18.3强化学习算法441
- 18.3.1动态编程441
- 18.3.2蒙特卡罗强化学习443
- 18.3.3时序差分学习444
- 18.4实现第一个RL算法446
- 18.4.1介绍OpenAI Gym工具包446
- 18.4.2用Q学习解决网格世界问题453
- 18.4.3深度Q学习概览456
- 18.5本章小结462