描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787522610801
机器学习对于众多软件从业人员的诱惑是无需多言的。然而樱桃好吃树难栽,大多数初学者最终未能到达成功的彼岸,不少甚至连“中途”未到就放弃了。
工作关系,我也曾经多次试图走进机器学习的殿堂。每次所下的决心虽然不小但却无功而返。放弃的原因并不复杂,经常都是由于对一个概念、一个原理、一个公式实在无法理解所导致的。比如,我看过的书中,关于线性回归都是引用现成的算法函数,没有看到过这个函数在数学上倒底是怎么实现的,因此对于给定的几个散点,如果不借助现成的算法函数,我确实没搞明白怎么才能拟合出相应的回归方程。线性回归是机器学习算法中最基本、最简单的算法,但我怎么敢说自己真正理解了线性回归呢?
相关的图书买了不少看了不少,浪费些脑细胞不算事儿,心里不好迈过的那道坎是买书浪费了很多钱。作为一名老图书编辑,牢骚之后往往会对所看的这些书做一些思考或幻想,比如:你不讲一下机器学习实验环境配置读者怎么边学边做?这个算法原理感觉这么晦涩到底是因为作者水平太高还是因为我水平太低?这个数学公式如果给出推导过程我是不是就不用东查西查了?公式中的这些符号为什么不能解释一下?这个地方如果能举个例子该有多好?这个地方配个图多直观?……
我向大家推荐邓子云老师这本机器学习的书,仅仅是因为我在编辑此书的过程中感觉到,他精确地假设了我的水平,他精确地知道每一个知识点怎么讲、讲到什么程度我才能懂,他精确地知道我在每一个地方会产生什么样的疑惑。后来有一次与邓老师吃饭时我说:“邓老师,你就像我肚子里的蛔虫”,邓老师说:“你学习过程中遇到的坑我基本都遇到过,我只是尽力把坑填平”。
简单的一句话,背后凝聚的是邓子云老师多年关于机器学习的教学、知识、实践、经验、思考及责任。这本七十余万字的长篇巨著,蕴含了数百张精心设计的实战插图,数十个的公式详细推导过程及讲解,字里行间的点点珠玑,深入浅出的醍醐灌顶……
尽管感觉本书还有不少可优化之处,但它确实使我在机器学习的征途中走出了最远的距离。
周春元
本书将带领读者一起主动拥抱机器学习,快乐翻越高等数学、算法分析、工程实践这“三座大山”。面对三类读者(会用即可、想深入学习、想成为专家)的学习动机和阅读需求,全书一共用19章来讲解机器学习的各种模型,包括机器学习中基础和关键的线性回归、逻辑回归、决策树、贝叶斯、支持向量机、KNN等。全书具有语言表达轻快、模型讲解细致、图表配备众多的特色。
本书可供计算机、人工智能、大数据等专业的大学生、研究生阅读,也可供需要用到机器学习技术的广大工程技术人员、研究人员作为参考。
前言
第1章 认知机器学习 1
1.1 什么是机器学习 2
1.1.1 理解机器学习的定义 2
1.1.2 机器学习有哪些模型 3
1.2 怎么学习机器学习 4
1.2.1 学习的总体步骤 4
1.2.2 理清工具与原理的关系 4
1.3 搭建开发环境 5
1.3.1 下载和安装Anaconda 5
1.3.2 Anaconda的5个工具软件 5
1.4 小结 6
第2章 打下开发基础 7
2.1 学会使用常用的数据结构 8
2.1.1 列表 8
2.1.2 字典 10
2.1.3 numpy 11
2.2 能用matplotlib绘图 15
2.2.1 画点 15
2.2.2 画线 16
2.2.3 画面 16
2.2.4 画多个子图 16
2.3 能编程保存和加载机器学习模型 18
2.3.1 保存模型 18
2.3.2 加载模型 18
2.4 小结 18
第3章 入门先学会使用线性回归 19
3.1 初步理解线性回归 20
3.1.1 涉及的主要术语 20
3.1.2 线性方程的表达 21
3.1.3 拟合出的线的样子 24
3.2 了解线性回归的过程 26
3.2.1 做线性回归的过程 26
3.2.2 模型的评价指标 27
3.2.3 数据集的划分 29
3.3 做线性回归的实例 30
3.3.1 用图观察数据项之间的关系 31
3.3.2 对数据集进行划分 33
3.3.3 用数据训练模型 34
3.3.4 用模型做预测 35
3.3.5 对模型做评价 38
3.4 使用更复杂的线性回归模型 46
3.4.1 以一元高次方程为模型 46
3.4.2 以多元一次方程为模型 51
3.4.3 以多元高次方程为模型 54
3.5 小结 58
第4章 学习线性回归背后的数学原理 60
4.1 补充学习高等数学知识 62
4.1.1 导数的意义 62
4.1.2 常用的求导法则 62
4.1.3 求某点的导数值 65
4.1.4 复合函数的导数 68
4.1.5 偏导数 70
4.1.6 行列式及其计算方法 72
4.1.7 矩阵及其计算方法 76
4.1.8 线性方程组的解法 81
4.2 理解和使用最小二乘法 85
4.2.1 为什么叫最小二乘法 85
4.2.2 求解一元一次方程模型的参数 87
4.2.3 求解多元一次方程模型的参数 94
4.2.4 求解一元高次方程和多元高次方程模型的参数 101
4.2.5 多种模型之间的比较 101
4.3 学习和使用梯度下降法 102
4.3.1 什么是梯度和梯度下降法 102
4.3.2 多元函数的梯度下降法 104
4.3.3 设置迭代的出口和学习率 110
4.3.4 线性回归的梯度下降法 113
4.3.5 由误差函数的图形引发对极小值的讨论 119
4.3.6 遍历训练数据做线性回归的三种梯度下降法 122
4.4 小结 126
第5章 深入浅出线性回归的高级知识 128
5.1 模型优化要解决什么问题 129
5.1.1 欠拟合、过拟合和恰当拟合 129
5.1.2 怎么解决过拟合的问题 130
5.2 用岭回归对线性回归模型做惩罚 130
5.2.1 做岭回归用最小二乘法时的数学原理 131
5.2.2 用岭迹法找到合适的λ值 132
5.2.3 做岭回归用梯度下降法时的数学原理 135
5.2.4 用交叉验证法找到合适的λ值 136
5.3 用Lasso回归对线性回归模型做惩罚 146
5.3.1 Lasso回归的数学原理 146
5.3.2 从图形上理解Lasso回归 150
5.3.3 用坐标轴下降法做Lasso回归 152
5.4 化繁为简使用scikit-learn库 164
5.4.1 用最小二乘法做线性回归 164
5.4.2 做岭回归 166
5.4.3 做Lasso回归 172
5.4.4 使用弹性网络做线性回归 174
5.5 小结 177
第6章 学会使用逻辑回归 179
6.1 初步理解逻辑回归 180
6.1.1 涉及的主要术语 180
6.1.2 线性分类的图形表达 180
6.1.3 逻辑回归的图形表达 183
6.2 用scikit-learn库做逻辑回归 185
6.2.1 引入乳腺癌数据集 186
6.2.2 用逻辑回归预测乳腺癌 187
6.2.3 评估逻辑回归模型 190
6.2.4 得到模型参数 192
6.2.5 得到分类的可能性值 193
6.3 解决多分类的问题 194
6.3.1 引入鸢尾花数据集 194
6.3.2 用One-Vs-All解决多分类问题 195
6.3.3 用One-Vs-One解决多分类问题 203
6.4 小结 205
第7章 学习逻辑回归背后的数学原理 207
7.1 补充学习高等数学知识 208
7.1.1 凸函数和Hessian矩阵 208
7.1.2 大数定律和中心极限定理 210
7.1.3 正态分布和伯努利分布 211
7.1.4 条件概率和似然函数 212
7.2 理解逻辑回归的数学原理 213
7.2.1 找到合适的用于优化的函数 213
7.2.2 在逻辑回归中使用梯度下降法的数学原理 215
7.3 用梯度下降法求解逻辑回归模型 216
7.3.1 将鸢尾花分成两类 216
7.3.2 预测乳腺癌 220
7.4 小结 222
第8章 深入浅出逻辑回归的高级知识 224
8.1 对逻辑回归做正则化 226
8.1.1 理解L2正则化的数学原理 226
8.1.2 用L2正则化预测乳腺癌 226
8.1.3 用其他惩罚方式做逻辑回归 228
8.2 化繁为简使用scikit-learn库 228
8.2.1 熟悉并使用LogisticRegression类 228
8.2.2 熟悉并使用SGDClassifier类 230
8.2.3 熟悉并使用LogisticRegressionCV
类 232
8.2.4 用LogisticRegression类做多分类 233
8.3 补充学习一些更高级的数学知识 234
8.3.1 泰勒公式 235
8.3.2 牛顿法和拟牛顿法的优化原理 239
8.3.3 lbfgs优化方法 247
8.3.4 newton-cg优化方法 248
8.3.5 liblinear优化方法 255
8.3.6 sag和saga优化方法 257
8.4 用softmax解决多分类问题 262
8.4.1 多分类的原理 262
8.4.2 画出多分类的界线 266
8.5 小结 269
第9章 学会使用朴素贝叶斯 271
9.1 初步理解朴素贝叶斯 272
9.1.1 朴素贝叶斯定理的一些基本术语 272
9.1.2 朴素贝叶斯怎么得出属于某一类的概率 274
9.2 用scikit-learn做朴素贝叶斯分类 276
9.2.1 使用GuassianNB类做鸢尾花分类 276
9.2.2 使用MultinomialNB类和BernoulliNB类 278
9.3 小结 279
第10章 学习朴素贝叶斯背后的数学原理 281
10.1 理解朴素贝叶斯分类的数学原理 282
10.1.1 理解全概率公式并推导朴素贝叶斯公式 282
10.1.2 利用朴素的内涵再推演朴素贝叶斯公式 284
10.2 进一步说明scikit-learn中做朴素贝叶斯分类的类 285
10.2.1 再看GuassianNB类 285
10.2.2 再看MultinomialNB类和BernoulliNB类 287
10.3 做区分垃圾邮件和非垃圾邮件的项目实战 288
10.3.1 理解spambase数据集 288
10.3.2 使用3种朴素贝叶斯模型区分垃圾邮件和非垃圾邮件 289
10.4 小结 291
第11章 深入浅出贝叶斯的高级知识 292
11.1 会用有向图表达贝叶斯网络 293
11.1.1 深刻理解独立和互斥的概念 293
11.1.2 用有向无环图表达贝叶斯网络 294
11.1.3 理解贝叶斯网络的3种基本结构 296
11.1.4 打贝叶斯球来分析两个事件是否关联 299
11.2 使用pgmpy建模贝叶斯网络 301
11.2.1 安装pgmpy 301
11.2.2 构建某女士结交男友决策的贝叶斯网络 301
11.2.3 用贝叶斯网络做预测 308
11.2.4 让贝叶斯网络自动学习到条件概率表 310
11.3 小结 311
第12章 学会使用决策树 313
12.1 初步理解决策树 314
12.1.1 决策树中的一些专业术语 314
12.1.2 常见的3种决策树算法 315
12.2 用scikit-learn做决策树分类 315
12.2.1 用信息增益做分类 316
12.2.2 用基尼指数做分类 317
12.2.3 画出决策树 319
12.3 小结 321
第13章 学习决策树背后的数学原理 322
13.1 学会计算决策树的专业术语表示的量 323
13.1.1 计算信息熵 323
13.1.2 计算信息增益 326
13.1.3 计算信息增益比 328
13.1.4 计算基尼指数 328
13.1.5 计算基尼指数增加值 330
13.2 理解3种决策树算法 330
13.2.1 理解ID3决策树算法 330
13.2.2 scikit-learn库用信息增益生成决策树的算法 335
13.2.3 理解CART算法 339
13.2.4 用CART算法做分类 341
13.2.5 用CART算法做回归 342
13.3 深入学习用scikit-learn做决策树分类和回归 343
13.3.1 DecisionTreeClassifier类的方法和属性 343
13.3.2 DecisionTreeRegressor类的方法和属性 345
13.3.3 用决策树做鸢尾花分类 346
13.3.4 用决策树做房价回归分析 351
13.4 小结 355
第14章 深入浅出决策树的高级知识 357
14.1 学会选择和调节决策树模型的参数 358
14.1.1 用交叉验证法选择更好的参数 358
14.1.2 用GridSearchCV类调节参数模型 363
14.2 理解后剪枝的原理并做实现 367
14.2.1 后剪枝有哪些策略 367
14.2.2 后剪枝之MEP策略 368
14.2.3 后剪枝之REP策略 377
14.2.4 后剪枝之PEP策略 378
14.2.5 后剪枝之CCP策略 382
14.3 小结 386
第15章 学会使用支持向量机 388
15.1 初步理解支持向量机 389
15.1.1 线性支持向量机 389
15.1.2 非线性支持向量机 389
15.2 用scikit-learn做支持向量机分类 390
15.2.1 做线性分类 390
15.2.2 做非线性分类 392
15.3 小结 394
第16章 学习支持向量机背后的数学原理 395
16.1 学会计算距离 396
16.1.1 两点之间的距离 396
16.1.2 点到超平面的距离 398
16.1.3 函数距离和几何距离 402
16.2 学懂拉格朗日乘数法 402
16.2.1 用拉格朗日乘数法求等式约束下的极值 403
16.2.2 再次深刻理解梯度 406
16.2.3 用拉格朗日乘数法求不等式约束下的极值 408
16.2.4 用拉格朗日乘数法和KKT应对更复杂的情况 411
16.3 理解支持向量机的数学原理 413
16.3.1 从感知机谈起 414
16.3.2 感知机模型的感知策略 416
16.3.3 用感知机模型做鸢尾花的二分类 419
16.4 硬间隔支持向量机 424
16.4.1 构建出目标函数及约束不等式 425
16.4.2 用拉格朗日乘数法求解目标函数和约束不等式 427
16.5 小结 432
第17章 深入浅出支持向量机的高级知识 434
17.1 用SMO算法求解硬间隔支持向量机的λ 435
17.1.1 转化优化问题 436
17.1.2 迭代更新的办法 438
17.2 软间隔支持向量机 441
17.2.1 软间隔支持向量机的优化问题 441
17.2.2 迭代时对参数值的剪辑 443
17.2.3 求解其他参数值 445
17.2.4 求解软间隔支持向量机模型的步骤总结 446
17.2.5 合页损失函数 447
17.3 自己编程实现支持向量机 448
17.3.1 实现SMO算法 448
17.3.2 实现二分类应用 453
17.4 非线性支持向量机 455
17.4.1 理解非线性支持向量机的原理 455
17.4.2 学懂Mercer定理 458
17.4.3 最简单的线性核函数 458
17.4.4 多项式核函数 460
17.4.5 高斯核函数 461
17.4.6 Sigmoid核函数 464
17.5 用支持向量机做回归分析 465
17.5.1 理解支持向量回归的原理 465
17.5.2 用拉格朗日乘数法做推导 466
17.6 深入浅出用scikit-learn做分类和回归 467
17.6.1 熟悉线性支持向量机(LinearSVC) 467
17.6.2 熟悉非线性支持向量机(SVC) 468
17.6.3 熟悉线性向量回归(LinearSVR)和非线性回归(SVR) 469
17.6.4 调节非线性支持向量机的参数 469
17.6.5 调节非线性支持向量回归模型的参数 472
17.7 小结 474
第18章 学会使用KNN 476
18.1 理解KNN的基本原理 477
18.1.1 不用数学公式讲解KNN的原理 477
18.1.2 扩展到多分类和回归应用 477
18.1.3 怎么确定KNN模型的k值 478
18.2 用KNN做分类和回归 478
18.2.1 用KNN模型做鸢尾花分类 478
18.2.2 用KNN模型做房屋价格回归 480
18.3 小结 482
第19章 学习KNN背后的数学原理 483
19.1 理解KNN的数学原理 484
19.1.1 用KNN做分类的数学原理 484
19.1.2 有多个备选分类及样本数量不均衡问题的解决办法 485
19.1.3 用KNN做回归的数学原理 487
19.2 再次讨论距离的度量 487
19.2.1 欧几里得距离 488
19.2.2 曼哈顿距离和闵可夫斯基距离 488
19.2.3 夹角的余弦 489
19.2.4 杰卡德相似系数和杰卡德相似距离 489
19.3 利用搜索树加速查找 489
19.3.1 构建KD树 489
19.3.2 运用KD树找到k个近邻点 491
19.3.3 构建Ball树 496
19.3.4 运用Ball树找到k个近邻点 499
19.4 调节KNN模型的参数 501
19.4.1 熟悉KNeighborsClassifier类 501
19.4.2 调节KNeighborsClassifier模型的参数 502
19.4.3 熟悉KNeighborsRegressor类并学会调节参数 504
19.5 小结 506
后续学习建议 508
参考文献 509
机器学习涉及的知识特别多,令人应接不睱;实际工程应用非常广,令人不得不学。目前,很多高校开设了人工智能、大数据专业,很多企业也需要用到人工智能技术。人工智能、大数据基础的知识领域自然还是机器学习。于是,学习机器学习的人越来越多。
当前市面上已有不少有关机器学习的图书。有的浅尝辄止,一种模型三五页就讲完了,让人大致明白但又感觉不着地;有的满版公式,让人不得要领;有的只有理论讲解没有实例,让人不好动手练习。我觉得根据读者对知识的学习诉求和规律来写作图书可以解决这些问题。我把对机器学习有学习动机的读者分成三类:
1.会用即可的读者。这类读者的诉求是只要会用某个类库(如scikit-learn)建立简单的机器学习模型、能做数据分析和预测即可。针对这类读者,写一大堆数学公式没有意义。
2.想深入学习的读者。这类读者的诉求是要学懂每个模型的数学原理,会推导公式。这类读者得掌握微积分、线性代数、概率论、统计学这四门课程的知识。
3.想成为专家的读者。这类读者的诉求是要学习每种模型的高级知识,并能融会贯通地使用开发工具找到较为理想的模型参数。那就需要掌握一些更为复杂的数据结构、算法分析与设计知识,并能接受厚重的知识阅读量。
为了满足这三类读者的诉求,考虑到机器学习的模型众多,我不打算在本书中讲解所有的机器学习模型,而是针对机器学习中基础和关键的线性回归、逻辑回归、决策树、贝叶斯、支持向量机、KNN这六种模型来进行详细讲解,并采取如下的写法:
1.第1、2章用于打基础。讲解有关机器学习的基本概念,说明如何使用Python编程做简单的开发。
2.对每个模型分3章来讲解。第1章满足会用即可的读者;第2章满足想深入学习的读者;第3章满足想成为专家的读者。由于KNN模型相对简单一些,没有编写第3章。
3.每个模型均有实例讲解。有的使用scikit-learn库编程实现,有的自主编程实现。我认为理解了原理,完全可以自己编程实现,只是我们没有必要这么做。多数情况下,使用类库编程即可,理解原理则还能有目标地调节参数来找到更为理想的模型。
本书有三点特色:
1.语言表达轻快。我比较喜欢阅读文字表达像聊天的图书,自己写作也将运用这种风格,尽管可能会损失一点数学的严谨性。
2.模型讲解细致。对每个模型有关的数学知识、原理、公式推导都讲得很细致。
3.图表配备众多。一图决胜千里,能用图表达出原理就用图表达。全书一共配了280多幅插图和80多张表格。
如果读者能把本书通读下来,相信再去阅读有关某一种模型的专著和学术论文将会轻松很多,也将能看得懂满版的数学公式;而且用于工程实践也不会是难事,读者要做的更多的是分析业务场景的需求、构建模型所需的数据。
鉴于作者的水平有限,疏漏之处在所难免,敬请读者多批评、指教,我的邮箱是[email protected],欢迎来信沟通交流。
感谢中国水利水电出版社万水分社的周春元副总经理,他经常和我探讨选题的写作、宣传和读者的需求,给了我创作的动力。感谢我的夫人黄婧女士,她承担了大量的家务及带孩子的事务,使得我有时间在工作之余进行创作。还要感谢参考文献中的很多作者及CSDN、博客园、知乎上的很多博主,他们的创作成果为我的写作提供了大量的参考资料。
本书的创作只是个开始,如果读者反馈写得还不错,我将继续创作讨论机器学习其他模型的图书。最后给出全书为三类读者准备的学习路线总图供阅读、参考。
为减轻读者购书成本,本书采用了黑白印刷,这可能导致某些图片的印刷效果不如彩色印刷效果好。因此,特将本书所有图片及书中源代码打包,如有需要,读者可扫描下方二维码进行免费下载。
评论
还没有评论。