具体描述
机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存、谋发展的决定性手段,这使得这一过去为分析师和数学家所专属的研究领域越来越为人们所瞩目。
本书第一部分主要介绍机器学习基础,以及如何利用算法进行分类,并逐步介绍了多种经典的监督学习算法,如k近邻算法、朴素贝叶斯算法、Logistic回归算法、支持向量机、AdaBoost集成方法、基于树的回归算法和分类回归树(CART)算法等。第三部分则重点介绍无监督学习及其一些主要算法:k均值聚类算法、Apriori算法、FP-Growth算法。第四部分介绍了机器学习算法的一些附属工具。
全书通过精心编排的实例,切入日常工作任务,摒弃学术化语言,利用高效的可复用Python代码来阐释如何处理统计数据,进行数据分析及可视化。通过各种实例,读者可从中学会机器学习的核心算法,并能将其运用于一些策略性任务中,如分类、预测、推荐。另外,还可用它们来实现一些更高级的功能,如汇总和简化等。
作者简介
Peter Harrington
拥有电气工程学士和硕士学位,他曾经在美国加州和中国的英特尔公司工作7年。Peter拥有5项美国专利,在三种学术期刊上发表过文章。他现在是Zillabyte公司的首席科学家,在加入该公司之前,他曾担任2年的机器学习软件顾问。Peter在业余时间还参加编程竞赛和建造3D打印机。
目录信息
第一部分 分类
第1章 机器学习基础 2
1.1 何谓机器学习 3
1.1.1 传感器和海量数据 4
1.1.2 机器学习非常重要 5
1.2 关键术语 5
1.3 机器学习的主要任务 7
1.4 如何选择合适的算法 8
1.5 开发机器学习应用程序的步骤 9
1.6 Python语言的优势 10
1.6.1 可执行伪代码 10
1.6.2 Python比较流行 10
1.6.3 Python语言的特色 11
1.6.4 Python语言的缺点 11
1.7 NumPy函数库基础 12
1.8 本章小结 13
第2章 k-近邻算法 15
2.1 k-近邻算法概述 15
2.1.1 准备:使用Python导入数据 17
2.1.2 从文本文件中解析数据 19
2.1.3 如何测试分类器 20
2.2 示例:使用k-近邻算法改进约会网站的配对效果 20
2.2.1 准备数据:从文本文件中解析数据 21
2.2.2 分析数据:使用Matplotlib创建散点图 23
2.2.3 准备数据:归一化数值 25
2.2.4 测试算法:作为完整程序验证分类器 26
2.2.5 使用算法:构建完整可用系统 27
2.3 示例:手写识别系统 28
2.3.1 准备数据:将图像转换为测试向量 29
2.3.2 测试算法:使用k-近邻算法识别手写数字 30
2.4 本章小结 31
第3章 决策树 32
3.1 决策树的构造 33
3.1.1 信息增益 35
3.1.2 划分数据集 37
3.1.3 递归构建决策树 39
3.2 在Python中使用Matplotlib注解绘制树形图 42
3.2.1 Matplotlib注解 43
3.2.2 构造注解树 44
3.3 测试和存储分类器 48
3.3.1 测试算法:使用决策树执行分类 49
3.3.2 使用算法:决策树的存储 50
3.4 示例:使用决策树预测隐形眼镜类型 50
3.5 本章小结 52
第4章 基于概率论的分类方法:朴素贝叶斯 53
4.1 基于贝叶斯决策理论的分类方法 53
4.2 条件概率 55
4.3 使用条件概率来分类 56
4.4 使用朴素贝叶斯进行文档分类 57
4.5 使用Python进行文本分类 58
4.5.1 准备数据:从文本中构建词向量 58
4.5.2 训练算法:从词向量计算概率 60
4.5.3 测试算法:根据现实情况修改分类器 62
4.5.4 准备数据:文档词袋模型 64
4.6 示例:使用朴素贝叶斯过滤垃圾邮件 64
4.6.1 准备数据:切分文本 65
4.6.2 测试算法:使用朴素贝叶斯进行交叉验证 66
4.7 示例:使用朴素贝叶斯分类器从个人广告中获取区域倾向 68
4.7.1 收集数据:导入RSS源 68
4.7.2 分析数据:显示地域相关的用词 71
4.8 本章小结 72
第5章 Logistic回归 73
5.1 基于Logistic回归和Sigmoid函数的分类 74
5.2 基于最优化方法的最佳回归系数确定 75
5.2.1 梯度上升法 75
5.2.2 训练算法:使用梯度上升找到最佳参数 77
5.2.3 分析数据:画出决策边界 79
5.2.4 训练算法:随机梯度上升 80
5.3 示例:从疝气病症预测病马的死亡率 85
5.3.1 准备数据:处理数据中的缺失值 85
5.3.2 测试算法:用Logistic回归进行分类 86
5.4 本章小结 88
第6章 支持向量机 89
6.1 基于最大间隔分隔数据 89
6.2 寻找最大间隔 91
6.2.1 分类器求解的优化问题 92
6.2.2 SVM应用的一般框架 93
6.3 SMO高效优化算法 94
6.3.1 Platt的SMO算法 94
6.3.2 应用简化版SMO算法处理小规模数据集 94
6.4 利用完整Platt SMO算法加速优化 99
6.5 在复杂数据上应用核函数 105
6.5.1 利用核函数将数据映射到高维空间 106
6.5.2 径向基核函数 106
6.5.3 在测试中使用核函数 108
6.6 示例:手写识别问题回顾 111
6.7 本章小结 113
第7章 利用AdaBoost元算法提高分类
性能 115
7.1 基于数据集多重抽样的分类器 115
7.1.1 bagging:基于数据随机重抽样的分类器构建方法 116
7.1.2 boosting 116
7.2 训练算法:基于错误提升分类器的性能 117
7.3 基于单层决策树构建弱分类器 118
7.4 完整AdaBoost算法的实现 122
7.5 测试算法:基于AdaBoost的分类 124
7.6 示例:在一个难数据集上应用AdaBoost 125
7.7 非均衡分类问题 127
7.7.1 其他分类性能度量指标:正确率、召回率及ROC曲线 128
7.7.2 基于代价函数的分类器决策控制 131
7.7.3 处理非均衡问题的数据抽样方法 132
7.8 本章小结 132
第二部分 利用回归预测数值型数据
第8章 预测数值型数据:回归 136
8.1 用线性回归找到最佳拟合直线 136
8.2 局部加权线性回归 141
8.3 示例:预测鲍鱼的年龄 145
8.4 缩减系数来“理解”数据 146
8.4.1 岭回归 146
8.4.2 lasso 148
8.4.3 前向逐步回归 149
8.5 权衡偏差与方差 152
8.6 示例:预测乐高玩具套装的价格 153
8.6.1 收集数据:使用Google购物的API 153
8.6.2 训练算法:建立模型 155
8.7 本章小结 158
第9章 树回归 159
9.1 复杂数据的局部性建模 159
9.2 连续和离散型特征的树的构建 160
9.3 将CART算法用于回归 163
9.3.1 构建树 163
9.3.2 运行代码 165
9.4 树剪枝 167
9.4.1 预剪枝 167
9.4.2 后剪枝 168
9.5 模型树 170
9.6 示例:树回归与标准回归的比较 173
9.7 使用Python的Tkinter库创建GUI 176
9.7.1 用Tkinter创建GUI 177
9.7.2 集成Matplotlib和Tkinter 179
9.8 本章小结 182
第三部分 无监督学习
第10章 利用K-均值聚类算法对未标注数据分组 184
10.1 K-均值聚类算法 185
10.2 使用后处理来提高聚类性能 189
10.3 二分K-均值算法 190
10.4 示例:对地图上的点进行聚类 193
10.4.1 Yahoo! PlaceFinder API 194
10.4.2 对地理坐标进行聚类 196
10.5 本章小结 198
第11章 使用Apriori算法进行关联分析 200
11.1 关联分析 201
11.2 Apriori原理 202
11.3 使用Apriori算法来发现频繁集 204
11.3.1 生成候选项集 204
11.3.2 组织完整的Apriori算法 207
11.4 从频繁项集中挖掘关联规则 209
11.5 示例:发现国会投票中的模式 212
11.5.1 收集数据:构建美国国会投票记录的事务数据集 213
11.5.2 测试算法:基于美国国会投票记录挖掘关联规则 219
11.6 示例:发现毒蘑菇的相似特征 220
11.7 本章小结 221
第12章 使用FP-growth算法来高效发现频繁项集 223
12.1 FP树:用于编码数据集的有效方式 224
12.2 构建FP树 225
12.2.1 创建FP树的数据结构 226
12.2.2 构建FP树 227
12.3 从一棵FP树中挖掘频繁项集 231
12.3.1 抽取条件模式基 231
12.3.2 创建条件FP树 232
12.4 示例:在Twitter源中发现一些共现词 235
12.5 示例:从新闻网站点击流中挖掘 238
12.6 本章小结 239
第四部分 其他工具
第13章 利用PCA来简化数据 242
13.1 降维技术 242
13.2 PCA 243
13.2.1 移动坐标轴 243
13.2.2 在NumPy中实现PCA 246
13.3 示例:利用PCA对半导体制造数据降维 248
13.4 本章小结 251
第14章 利用SVD简化数据 252
14.1 SVD的应用 252
14.1.1 隐性语义索引 253
14.1.2 推荐系统 253
14.2 矩阵分解 254
14.3 利用Python实现SVD 255
14.4 基于协同过滤的推荐引擎 257
14.4.1 相似度计算 257
14.4.2 基于物品的相似度还是基于用户的相似度? 260
14.4.3 推荐引擎的评价 260
14.5 示例:餐馆菜肴推荐引擎 260
14.5.1 推荐未尝过的菜肴 261
14.5.2 利用SVD提高推荐的效果 263
14.5.3 构建推荐引擎面临的挑战 265
14.6 基于SVD的图像压缩 266
14.7 本章小结 268
第15章 大数据与MapReduce 270
15.1 MapReduce:分布式计算的框架 271
15.2 Hadoop流 273
15.2.1 分布式计算均值和方差的mapper 273
15.2.2 分布式计算均值和方差的reducer 274
15.3 在Amazon网络服务上运行Hadoop程序 275
15.3.1 AWS上的可用服务 276
15.3.2 开启Amazon网络服务之旅 276
15.3.3 在EMR上运行Hadoop作业 278
15.4 MapReduce上的机器学习 282
15.5 在Python中使用mrjob来自动化MapReduce 283
15.5.1 mrjob与EMR的无缝集成 283
15.5.2 mrjob的一个MapReduce脚本剖析 284
15.6 示例:分布式SVM的Pegasos算法 286
15.6.1 Pegasos算法 287
15.6.2 训练算法:用mrjob实现MapReduce版本的SVM 288
15.7 你真的需要MapReduce吗? 292
15.8 本章小结 292
附录A Python入门 294
附录B 线性代数 303
附录C 概率论复习 309
附录D 资源 312
索引 313
版权声明 316
· · · · · · (收起)
读后感
为什么我会力荐这本书? 也许书中分类器都非常的简单,数学理论都非常的粗浅(为了看明白书中SVM分类器的训练过程,不得不去复习了二次凸优化解法,自己推导被作者略去的中间过程),算法测试也只在轻量级的数据集上完成。 不过,大可不必像其他评论一样对贬低本书。聪明的读...
客观说,完全不能当入门书。 缺少必要的证明过程,有些甚至连公式都没有。 我觉得既然要学习机器学习,光改改代码完全是不够的,起码还得知道各个算法的基本公式和过程,不幸的是,这本书没有。 就比如逻辑斯蒂回归那章,他连损失函数都没提,就开始说梯度法了。问题是梯度法的...
我的学习过程如下,供大家参考: 1、有些python的基础编程能力,如果没有,先花半个小时学习下; 2、数学基本统计基础,如果不懂数学原理,可以先不要去理解数学原理; 3、先上手写下代码,沉浸进入,熟悉了代码流程,再回头去看数据原理,就明白了。 5、一句话,先不求甚解,...
人工智能的脉络 机器学习是人工智能的一个分支。 人工智能的研究历史有着一条从以“推理”为重点,到以“知识”为重点,再到以“学习”为重点的自然、清晰的脉络。 机器学习是实现人工智能的一个途径,即以机器学习为手段解决人工智能中的问题。 从学习方式来讲,机器学习包括...
用户评价
在翻阅这本书的过程中,我最深的感受就是它对“实战”二字的精准诠释。不同于那些停留在理论层面、讲授大量抽象概念的书籍,这本书从一开始就将重心放在了如何将机器学习技术落地应用。作者在介绍每一种算法或模型时,都会紧接着提供与之配套的Python代码示例,并且这些代码不仅仅是简单的“Hello World”,而是包含了数据预处理、模型训练、参数调优、性能评估等一系列完整流程。我特别被书中关于“决策树”部分的讲解所吸引。作者不仅详细解释了决策树的构建原理,如信息增益、基尼系数等,还通过一个具体的客户流失预测案例,展示了如何使用Python库(比如scikit-learn)来构建和可视化决策树模型。看到代码一行一行地执行,数据被处理,模型被训练,最后生成一棵清晰的树状结构,预测客户是否会流失,这个过程带来的成就感是巨大的。我尝试着去修改数据集,或者调整模型的参数,观察结果的变化,这种亲手实践的体验,让我对算法的理解不再是停留在“知道有这么个东西”,而是真正“用起来”。书中的案例也覆盖了分类、回归、聚类等多种机器学习任务,每一个都非常有代表性,让我得以在短时间内接触到不同类型的应用场景,为我将来面对更复杂的问题打下了坚实的基础。
这本书的叙事风格和语言表达方式,给我留下了非常深刻的印象。作者的文笔流畅自然,没有使用过于生硬的学术术语,而是用一种能够引起共鸣的方式来阐述复杂的概念。例如,在介绍“过拟合”问题时,他打了一个很贴切的比方,说模型就像一个学生,如果他只是死记硬背课本上的例子,而不去理解背后的原理,那么在遇到稍微变化一点的问题时,他就束手无策了。反之,一个真正理解了知识的学生,即使题目形式改变,也能灵活运用所学知识来解决。这种比喻让我瞬间就明白了过拟合的核心问题,也理解了为什么需要正则化等技术来解决它。书中的图表和插图也起到了至关重要的作用,它们不仅仅是装饰,更是帮助理解抽象概念的有力工具。我特别喜欢书中那些用来解释算法原理的示意图,它们将复杂的数学关系和数据流转化为直观的视觉信息,让我在阅读过程中能够轻松地抓住重点。而且,作者在讲解每个算法的优缺点和适用场景时,也非常客观和中肯,不会夸大其词,而是帮助读者建立一个全面的认识,知道在什么情况下选择哪种算法更加合适。
这本书在讲解“模型调优”这个环节时,展现出了极高的实用价值。作者并没有仅仅停留在理论层面,而是提供了多种实用的调优技术,并辅以大量的代码示例,指导读者如何系统地优化模型的性能。我印象特别深刻的是关于“网格搜索(Grid Search)”和“随机搜索(Random Search)”的讲解。作者详细解释了这两种方法如何帮助我们有效地寻找最优的模型超参数组合,并且通过具体的案例,展示了如何在Python中使用scikit-learn库来实现这些技术。我跟着书中的代码,尝试调整模型的学习率、正则化参数等,并使用网格搜索来寻找最佳的组合。看到模型在调优后,性能得到了显著的提升,这种“亲手调优”带来的成就感,让我对机器学习模型的优化过程有了更直观的理解。此外,作者还提到了早停(Early Stopping)等其他调优技巧,并解释了它们的应用场景。这让我意识到,一个优秀的机器学习模型,不仅仅是算法的选择,更重要的是精细化的调优过程。
我不得不说,这本书对于“特征工程”的重视程度,给我留下了非常深刻的印象。在许多机器学习的介绍中,特征工程往往被一带而过,但这本书却将它作为一个独立的、至关重要的章节来讲解,并且提供了大量的实用技巧和代码示例。作者首先解释了为什么“Garbage in, garbage out”——即糟糕的特征输入会导致糟糕的模型输出,强调了特征工程在机器学习流程中的核心地位。然后,他详细介绍了如何进行特征选择(比如过滤法、包裹法)、特征提取(比如PCA、LDA)以及如何创建新的、更有意义的特征(比如多项式特征、交互特征)。我跟着书中的代码,尝试对一个数据集进行特征工程,比如将类别特征进行独热编码(One-Hot Encoding),或者对连续特征进行标准化(Standardization)。看到经过特征工程处理后的数据,在模型训练中的表现有了明显的提升,这种“化腐朽为神奇”的过程,让我对特征工程的价值有了全新的认识。它不仅仅是数据的预处理,更是对数据进行“提炼”和“升华”,从而释放出其潜在的价值。
随着阅读的深入,我发现这本书的结构安排非常巧妙,它遵循了一个由浅入深、循序渐进的学习路径。从最基础的机器学习概念和流程介绍,到各种经典算法的原理和实现,再到更高级的模型评估和优化技巧,每一个章节都像是为前一章的内容进行补充和拓展。我尤其欣赏作者在讲解“支持向量机(SVM)”时,没有直接给出复杂的数学推导,而是从“寻找最优分隔超平面”这个直观的几何概念入手,通过二维空间的图示,生动地展示了SVM如何在高维空间中找到最佳的分类边界。然后,他才逐步引入核函数等概念,解释了SVM在处理非线性可分问题时的强大能力。在代码实现部分,作者同样提供了清晰的Python示例,展示了如何使用不同的核函数来训练SVM模型,并如何通过交叉验证来选择最优的参数。我跟着书中的步骤,自己动手实践,调整核函数的类型和参数,观察模型在训练集和测试集上的表现,这种“动手做”的过程,让我对SVM的理解更加深刻。它不仅仅是停留在“知道SVM是什么”,而是真正“理解SVM为什么这么做,以及怎么做得更好”。书中的案例选择也很有针对性,比如在讲解聚类算法时,他选择了对客户进行细分作为案例,这让我联想到在商业分析中,如何利用聚类来发现潜在的客户群体,并为他们提供定制化的服务。
这本书在“深度学习”的初步介绍部分,虽然篇幅不算特别长,但却非常精炼且切中要害。作者并没有一开始就抛出复杂的神经网络结构,而是从“神经网络的灵感来源——人脑”这样一个角度切入,解释了神经元、激活函数、前向传播和反向传播等核心概念。我特别欣赏作者在讲解“反向传播”算法时,用了一个“学生通过老师的反馈来纠正错误”的比喻,生动地说明了梯度下降如何一步步地更新模型的权重,以最小化误差。在代码实现方面,书中虽然没有深入到TensorFlow或PyTorch的底层细节,但提供了一个使用NumPy库从头构建一个简单前馈神经网络的示例,让我得以窥见神经网络的内部运作机制。这个过程虽然代码量不小,但作者的讲解非常细致,让我能够一步步地理解每一行代码的作用,以及它们是如何协同工作的。这为我后续深入学习深度学习框架打下了坚实的基础,让我不再对深度学习感到望而生畏,而是充满了探索的兴趣。
在阅读关于“无监督学习”的部分时,我被书中对“聚类”算法的详尽阐述深深吸引。作者并没有止步于介绍K-Means这种最基础的算法,而是深入探讨了层次聚类、DBSCAN等多种聚类方法,并详细解释了它们各自的原理、优缺点以及适用的场景。我尤其喜欢作者在讲解K-Means时,用一个“将一群学生按照他们的学习成绩和兴趣分组”的例子,来比喻聚类算法如何将相似的数据点归为一类。这让抽象的算法概念变得非常生动和易于理解。在代码实现方面,书中提供了使用Python库(如scikit-learn)来执行K-Means算法的完整示例,包括如何选择合适的K值,如何进行数据预处理,以及如何可视化聚类结果。我尝试着将书中的代码应用到一个我自己收集的数据集上,看到了数据被分成不同的簇,并且通过散点图清晰地展示出来。这种亲手实践带来的成就感,以及对数据背后隐藏模式的洞察,让我对无监督学习的价值有了更深刻的认识。它让我意识到,即使没有明确的标签,我们也能从数据中发现有意义的结构。
这本书的封面上“机器学习实战”几个字,简直就像一道召唤的符咒,瞬间点燃了我对这个领域的好奇与向往。拿到书的那一刻,我小心翼翼地翻开,首页的设计就透着一股严谨又充满活力的气息,那种想要立即深入探索的冲动,就像是被一双无形的手推着,让我迫不及待地想揭开机器学习的神秘面纱。作者在开篇的引言部分,没有像许多技术书籍那样枯燥地罗列概念和术语,而是用一种非常接地气的方式,描绘了机器学习如何渗透到我们生活的方方面面,从智能手机的语音助手到推荐算法,再到自动驾驶汽车,这些鲜活的例子让我瞬间感受到了这门技术强大的生命力。我尤其欣赏作者在介绍核心概念时,没有直接抛出复杂的数学公式,而是先从一个直观的比喻或者一个简单的场景入手,循序渐进地引导读者理解,比如在讲解“监督学习”时,他用了一个“教小孩子认识猫狗”的例子,通过展示大量的图片并告诉孩子“这是猫”、“这是狗”,来类比模型通过标注数据进行学习的过程。这种教学方式对于我这样的初学者来说,简直是福音,它让原本可能令人生畏的理论变得易于理解,也建立了我继续深入学习的信心。我甚至开始设想,未来我能否用这些知识去解决一些实际问题,比如分析自己购买的商品数据,或者优化一些日常的工作流程。这本书不仅仅是一本技术指南,更像是一位循循善诱的老师,引导着我一步步走向更广阔的知识海洋。
本书最让我称道的一点,便是它在“模型评估与选择”这个关键环节上,所展现出的深度和广度。作者并没有仅仅满足于介绍准确率(Accuracy)这么一个简单的指标,而是详细阐述了精确率(Precision)、召回率(Recall)、F1分数等一系列更精细的评估指标,并且解释了它们在不同场景下的含义和重要性。我记得书中用了一个“垃圾邮件检测”的案例,清晰地说明了为什么在精确率和召回率之间需要权衡,以及如何根据业务需求来选择合适的指标。这让我明白,仅仅追求高的准确率并不能完全代表一个模型的优劣,理解模型的“好”与“坏”需要更全面的视角。此外,作者还花费了大量的篇幅介绍交叉验证(Cross-validation)技术,比如K折交叉验证,并解释了它如何帮助我们更准确地评估模型的泛化能力,避免过拟合。我跟着书中的代码,亲手实现了一个K折交叉验证的流程,对训练集进行划分,对每个折叠的模型进行训练和评估,最后计算平均性能。这个过程让我深刻体会到,严谨的模型评估是确保机器学习项目成功的基石。
我不得不说,这本书在“降维”这一章节的处理上,真是让我眼前一亮。在很多其他资料中,降维往往被描述得非常抽象,涉及到PCA、t-SNE等算法,但缺乏清晰的直观解释。而这本书则通过一个生动形象的比喻,将高维数据“压缩”到二维或三维空间来可视化的过程,描绘得淋漓尽致。它用了一个“从一张详细的地图,到一个更简洁的区域示意图”的类比,说明了降维的本质就是保留数据的主要特征,同时去除冗余的信息。在讲解PCA(主成分分析)时,作者不仅给出了数学上的推导,更重要的是,他通过一个实际的数据集,展示了如何用Python代码计算协方差矩阵,找到主成分,并将数据投影到低维空间。看到原始的高维数据经过PCA处理后,在二维散点图上清晰地展现出不同的簇,我仿佛看到了隐藏在数据深处的规律被揭示出来。作者还特意强调了降维在可视化和提高模型效率上的重要性,这让我意识到,在处理大规模数据集时,降维并非可选项,而是必备的步骤。这种深入浅出的讲解方式,让原本可能令人生畏的数学理论变得触手可及,也让我对如何在实际项目中应用降维技术有了更清晰的思路。
认真的说,这本书写得不是特别好,但是比较适合入门了。由于原理没有说清楚,代码写得也一般(大量的缩写变量名,没有注释),所以我对很多算法都没有理解。接下来看周志华的《机器学习》
补标。老一代的书了。
介绍机器学习的入门书,使用Python实现。示范的例子都挺有趣的,比如国会选举、twitter数据的分析。算法的覆盖面挺广,可惜原理的讲解有些浅,因此需要一些基础知识。书中没有神经网络算法的介绍,有些遗憾。
例子给出的代码很差,丝毫不考虑读者的感受。
处于原理和直接sdk之间的自己实现算法. 不去看数学原理的书, 看这个真的没什么用.