描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121317200
算法与代码兼顾,理论与实践结合
很丰富:7种算法,50段实现,55个实例,总代码量5295行,全面而不冗余
很扎实:对经典有效的机器学习算法的核心内容进行了相当详细的推导
很应用:将理论实打实地用Python代码写出来,可以解决一定的任务
很前沿:叙述了TensorFlow框架、Inception-v3 from Google、迁移学习等前沿技术
Python与机器学习这一话题是如此的宽广,仅靠一本书自然不可能涵盖到方方面面,甚至即使出一个系列也难能做到这点。单就机器学习而言,其领域就包括但不限于如下:有监督学习(Supervised Learning),无监督学习(Unsupervised Learning)和半监督学习(Semi-Supervised Learning)。而具体的问题又大致可以分两类:分类问题(Classification)和回归问题(Regression)。Python本身带有许多机器学习的第三方库,但《Python与机器学习实战》在绝大多数情况下只会用到Numpy这个基础的科学计算库来进行算法代码的实现。这样做的目的是希望读者能够从实现的过程中更好地理解机器学习算法的细节,以及了解Numpy的各种应用。不过作为补充,《Python与机器学习实战》会在适当的时候应用scikit-learn这个成熟的第三方库中的模型。《Python与机器学习实战》适用于想了解传统机器学习算法的学生和从业者,想知道如何高效实现机器的算法的程序员,以及想了解机器学习的算法能如何进行应用的职员、经理等。
目录
第1章 Python与机器学习入门 1
1.1 机器学习绪论 1
1.1.1 什么是机器学习 2
1.1.2 机器学习常用术语 3
1.1.3 机器学习的重要性 6
1.2 人生苦短,我用Python 7
1.2.1 为何选择Python 7
1.2.2 Python 在机器学习领域的优势 8
1.2.3 Anaconda的安装与使用 8
1.3 第—个机器学习样例 12
1.3.1 获取与处理数据 13
1.3.2 选择与训练模型 14
1.3.3 评估与可视化结果 15
1.4 本章小结 17
第2章 贝叶斯分类器 18
2.1 贝叶斯学派 18
2.1.1 贝叶斯学派与频率学派 19
2.1.2 贝叶斯决策论 19
2.2 参数估计 20
2.2.1 极大似然估计(ML估计) 21
2.2.2 极大后验概率估计(MAP估计) 22
2.3 朴素贝叶斯 23
2.3.1 算法陈述与基本架构的搭建 23
2.3.2 MultinomialNB的实现与评估 31
2.3.3 GaussianNB的实现与评估 40
2.3.4 MergedNB的实现与评估 43
2.3.5 算法的向量化 50
2.4 半朴素贝叶斯与贝叶斯网 53
2.4.1 半朴素贝叶斯 53
2.4.2 贝叶斯网 54
2.5 相关数学理论 55
2.5.1 贝叶斯公式与后验概率 55
2.5.2 离散型朴素贝叶斯算法 56
2.5.3 朴素贝叶斯和贝叶斯决策 58
2.6 本章小结 59
第3章 决策树 60
3.1 数据的信息 60
3.1.1 信息论简介 61
3.1.2 不确定性 61
3.1.3 信息的增益 65
3.1.4 决策树的生成 68
3.1.5 相关的实现 77
3.2 过拟合与剪枝 92
3.2.1 ID3、C4.5的剪枝算法 93
3.2.2 CART剪枝 100
3.3 评估与可视化 103
3.4 相关数学理论 111
3.5 本章小结 113
第4章 集成学习 114
4.1 “集成”的思想 114
4.1.1 众擎易举 115
4.1.2 Bagging与随ji森林 115
4.1.3 PAC框架与Boosting 119
4.2 随ji森林算法 120
4.3 AdaBoost算法 124
4.3.1 AdaBoost算法陈述 124
4.3.2 弱模型的选择 126
4.3.3 AdaBoost的实现 127
4.4 集成模型的性能分析 129
4.4.1 随ji数据集上的表现 130
4.4.2 异或数据集上的表现 131
4.4.3 螺旋数据集上的表现 134
4.4.4 蘑菇数据集上的表现 136
4.5 AdaBoost算法的解释 138
4.6 相关数学理论 139
4.6.1 经验分布函数 139
4.6.2 AdaBoost与前向分步加法模型 140
4.7 本章小结 142
第5章 支持向量机 144
5.1 感知机模型 145
5.1.1 线性可分性与感知机策略 145
5.1.2 感知机算法 148
5.1.3 感知机算法的对偶形式 151
5.2 从感知机到支持向量机 153
5.2.1 间隔化与线性SVM 154
5.2.2 SVM算法的对偶形式 158
5.2.3 SVM的训练 161
5.3 从线性到非线性 163
5.3.1 核技巧简述 163
5.3.2 核技巧的应用 166
5.4 多分类与支持向量回归 180
5.4.1 一对多方法(One-vs-Rest) 180
5.4.2 一对一方法(One-vs-One) 181
5.4.3 有向无环图方法(Directed Acyclic Graph Method) 181
5.4.4 支持向量回归(Support Vector Regression) 182
5.5 相关数学理论 183
5.5.1 梯度下降法 183
5.5.2 拉格朗日对偶性 185
5.6 本章小结 187
第6章 神经网络 188
6.1 从感知机到多层感知机 189
6.2 前向传导算法 192
6.2.1 算法概述 193
6.2.2 激活函数(Activation Function) 195
6.2.3 损失函数(Cost Function) 199
6.3 反向传播算法 200
6.3.1 算法概述 200
6.3.2 损失函数的选择 202
6.3.3 相关实现 205
6.4 特殊的层结构 211
6.5 参数的更新 214
6.5.1 Vanilla Update 217
6.5.2 Momentum Update 217
6.5.3 Nesterov Momentum Update 219
6.5.4 RMSProp 220
6.5.5 Adam 221
6.5.6 Factory 222
6.6 朴素的网络结构 223
6.7 “大数据”下的网络结构 227
6.7.1 分批(Batch)的思想 228
6.7.2 交叉验证 230
6.7.3 进度条 231
6.7.4 计时器 233
6.8 相关数学理论 235
6.8.1 BP算法的推导 235
6.8.2 Softmax log-likelihood组合 238
6.9 本章小结 240
第7章 卷积神经网络 241
7.1 从NN到CNN 242
7.1.1 “视野”的共享 242
7.1.2 前向传导算法 243
7.1.3 全连接层(Fully Connected Layer) 250
7.1.4 池化(Pooling) 251
7.2 利用TensorFlow重写NN 252
7.2.1 反向传播算法 252
7.2.2 重写Layer结构 253
7.2.3 实现SubLayer结构 255
7.2.4 重写CostLayer结构 261
7.2.5 重写网络结构 262
7.3 将NN扩展为CNN 263
7.3.1 实现卷积层 263
7.3.2 实现池化层 266
7.3.3 实现CNN中的特殊层结构 267
7.3.4 实现LayerFactory 268
7.3.5 扩展网络结构 270
7.4 CNN的性能 272
7.4.1 问题描述 272
7.4.2 搭建CNN模型 273
7.4.3 模型分析 280
7.4.4 应用CNN的方法 283
7.4.5 Inception 286
7.5 本章小结 289
附录A Python入门 290
附录B Numpy入门 303
附录C TensorFlow入门 310
前言
自从AlphaGo在2016年3月战胜人类围棋高手李世石后,“人工智能”“深度学习”这一类词汇就进入了大众的视野;而作为更加宽泛的一个概念——“机器学习”则多少顺势成为了从学术界到工业界都相当火热的话题。不少人可能都想尝试和体验一下“机器学习”这个可以说相当神奇的东西,不过可能又苦于不知如何下手。编著本书的目的,就是想介绍一种入门机器学习的方法。虽然市面上已经有许多机器学习的书籍,但它们大多要么过于偏重理论,要么过于偏重应用,要么过于“厚重”;本书致力于将理论与实践相结合,在讲述理论的同时,利用Python这一门简明有力的编程语言进行一系列的实践与应用。
当然,囿于作者水平,本书实现的一些模型从速度上来说会比成熟的第三方库中实现的模型要慢不少。一方面是因为比较好的第三方库背后往往会用底层语言来实现核心算法,另一方面则是本书通常会把数据预处理的过程涵盖在模型中。以决策树模型为例,scikit-learn中的决策树模型会比本书实现的要快很多,但本书实现的模型能够用scikit-learn中决策树模型训练不了的训练集来训练。
同时,限于篇幅、本书无法将所有代码都悉数放出(事实上这样做的意义也不是很大),所以我们会略去一些相对枯燥且和相应算法的核心思想关系不大的实现。对于这些实现,我们会进行相应的算法说明,感兴趣的读者可以尝试自己一步一步地去实现,也可以直接在GitHub上面查看笔者自己实现的版本(GitHub地址会在相应的地方贴出)。本书所涉及的所有代码都可以参见,笔者也建议在阅读本书之前先把这个链接里面的内容都下载下来作为参照。毕竟即使在本书收官之后,笔者仍然会不时地在上述链接中优化和更新相应的算法,而这些更新是无法反映在本书中的。
虽说确实可以完全罔顾理论来用机器学习解决许多问题,但是如果想要理解背后的道理并借此提高解决问题的效率,扎实的理论根基是必不可少的。本书会尽量避免罗列枯燥的数学公式,但是基本的公式常常不可或缺。虽然笔者想要尽量做到通俗易懂,但仍然还是需要读者拥有一定的数学知识。不过为了阅读体验良好,本书通常会将比较烦琐的数学理论及相关推导放在每一章的倒数第二节(zui后一节是总结)作为某种意义上的“附加内容”。这样做有若干好处:
? 对于已经熟知相关理论的读者,可以不再重复地看同样的东西;
? 对于只想了解机器学习各种思想、算法和实现的读者,可以避免接受不必要的知识;
? 对于想了解机器学习背后道理和逻辑的读者,可以有一个集中的地方进行学习。
本书的特点
? 理论与实践结合,在较为详细、全面地讲解理论之后,会配上相应的代码实现以加深读者对相应算法的理解。
? 每一章都会有丰富的实例,让读者能够将本书所阐述的思想和模型应用到实际任务中。
? 在涵盖了诸多经典的机器学习算法的同时,也涵盖了许多zui新的研究成果(比如zui后一章所讲述的卷积神经网络(CNN)可以说就是许多“深度学习”的基础)。
? 所涉及的模型实现大多仅仅基于线性代数运算库(Numpy)而没有依赖更高级的第三方库,读者无须了解Python那浩如烟海的第三方库中的任何一个第三方库便能读懂本书的代码。
本书的内容安排
第1章 Python与机器学习入门
本章介绍了机器学习的概念和一些基础术语,比如泛化能力、过拟合、经验风险(ERM)和结构风险(SRM)等,还介绍了如何安装并使用Anaconda这一Python的科学运算环境。同时在zui后,我们解决了一个小型的机器学习问题。本章内容虽不算多,却可说是本书所有内容的根基。
第2章 贝叶斯分类器
作为和我们比较熟悉的频率学派相异的学派,贝叶斯学派的思想相当耐人寻味,值得进行研究与体会。本章将主要介绍的朴素贝叶斯正是贝叶斯决策的一个经典应用,虽然它加了很强的假设,但其在实际应用中的表现仍然相当优异(比如自然语言处理中的文本分类)。而为了克服朴素贝叶斯假设过强的缺点,本章将简要介绍的,诸如半朴素贝叶斯和贝叶斯网这些贝叶斯分类器会在某些领域拥有更好的性能。
第3章 决策树
决策树可以说是zui直观的机器学习模型之一,它多多少少拥有着信息论的一些理论背景作为支撑。决策树的训练思想简洁,模型本身可解读性强,本章将会在介绍其生成、剪枝等一系列实现的同时,通过一些可视化来对其有更好的理解。
第4章 集成学习
正所谓“三个臭皮匠,赛过诸葛亮”。集成学习的两大板块“Bootstrap”和“Boosting”所对应的主流模型——“随ji森林(RandomForest)”和“AdaBoost”正是这句俗语的zui佳解释。本章在介绍相关理论与实现的同时,将会通过相当多的例子来剖析集成学习的一些性质。
第5章 支持向量机
支持向量机(SVM)有着非常辉煌的历史,它背后那套相当深刻而成熟的数学理论让它在现代的深度学习中“异军突起”之前,占据着相当重要的地位。本章将会尽量厘清支持向量机的思想与相关的比较简明的理论,同时会通过一些对比来体现支持向量机的优异之处。
第6章 神经网络
神经网络在近现代可以说已经成为“耳熟能详”的词汇了,它让不少初次听说其名号的人(包括笔者在内)对其充满着各种幻想。虽说神经网络算法的推导看上去烦复而“令人生畏”,但其实所用到的知识都并不深奥。本章会相当详细地介绍神经网络中的两大算法——“前向传导算法”和“反向传播算法”,同时还会介绍诸多主流的“参数更新方法”。除此之外,本章还会提及如何在“大数据”下改进和优化我们的神经网络模型(这一套思想是可以推广到其他机器学习模型上的)。
第7章 卷积神经网络
卷积神经网络是许多深度学习的基础结构,它可以算是神经网络的一种拓展。卷积神经网络的思想具有很好的生物学直观,适合处理结构性的数据。同时,利用成熟的卷积神经网络模型,我们能够比较好地完成许多具有一定难度而相当有趣的任务;本章则会针对这些任务中的“图像分类”任务,提出一套比较详细的解决方案。
本书由浅入深,理论与实践并存,同时更是将理论也进行了合理的分级;无论在此前对机器学习有何种程度的认知,想必都能通过不同的阅读方式有所收获吧。
适合阅读本书的读者
? 想要了解某些传统机器学习算法细节的学生、老师、从业者等。
? 想要知道如何“从零开始”高效实现机器学习算法的程序员。
? 想要了解机器学习算法能如何进行应用的职员、经理等。
? 对机器学习抱有兴趣并想要入门的爱好者。
编者 何宇健
评论
还没有评论。