本书是机器学习入门书籍,面向需要提升数据科学技能的开发人员和需要提升编程技能的数据科学家,涵盖了从机器学习基础概念到完整解决方案的各个方面。本书共分为五个部分,主要内容包括人工智能基础知识、实现机器学习解决方案的步骤、微软的ML.NET库、实用的机器学习算法、神经网络、AI云服务等,并且免费提供使用ML.NET库构建的代码示例。
Preface
前 言
我们需要那些能够梦想从未发生的事情,并追问自己为什么不能这样的人。
约翰·F.肯尼迪在爱尔兰议会的演讲,1963年6月
人们对如今的人工智能持有两种观点,这两种观点都不是排他性的。一种观点是绝大多数媒体宣扬和追求的观点,而另一种观点则是IT社区宣扬和追求的观点。在这两大阵营中,都有一些真正的专家和权威人士。
媒体宣扬的观点关注的是,人工智能作为一个整体,无论是以已知还是未知的形式,可能对我们的未来生活产生的影响。IT社区(软件和数据科学家所属领域)提出的观点认
为,机器学习是新一代软件服务的基础,而新一代软件服务只是比现有服务更智能。
在媒体触及的大众与小得多的IT社区之间的中间地带是云服务团队。他们每天进行研究,使技术水平向前迈进,发布新的服务,为新的和现有的应用程序添加智能。
位于人工智能金字塔底部的是经理和高管。一方面,他们渴望把从科技新闻中听到的那些令人惊叹的服务应用到商业中,以超越竞争对手。另一方面,他们面临着以最大的希望开始的项目的惊人账单。
人工智能不是一根魔杖。
人工智能不是按使用次数付费的服务。不过,它既不是资本,也不是经营支出。
人工智能只是一种软件。
如果能从软件开发的角度来考虑,包括设置需求,找到可靠的合作伙伴,制定预算然后开始工作,在充分考虑敏捷性的前提下重新开始等,那么任何关于人工智能的商业决策都会更好。
就那么简单吗?
虽然人工智能与软件开发有关,但它与建立电子商务网站或订购平台并不完全一样。
如果你不清楚要解决的问题、问题的背景和要表达的观点,就不要从事人工智能项目。
不要以最有力的竞争者为唯一榜样来开始一个雄心勃勃的冒险项目。
如果你还没准备好损失一大笔钱,那就不要开始这样的项目。
每次只解决一个痛点,构建一个跨职能团队,并提供对数据的完全访问。
谁应该读本书
在准备本书的过程中,我们收到了很多关于章节内容安排的反馈,也多次对此进行了详细说明。我们至少对目录进行了三次彻底修改。困难之处在于,我们设计本书是为了使其独特且创新,追求的是一种与我们所看到的现实相去甚远的机器学习和软件开发的理念。希望我们的愿景也是将来机器学习的愿景!
受数据科学的限制,我们把机器学习看作交付给开发人员的组件,将其嵌入某些Web服务或桌面应用程序中。这是一个恰到好处的瀑布式结构。公司和企业经常谈论的敏捷在哪里?敏捷机器学习意味着数据科学家和开发人员是在一起工作的,业务分析师和领域专家也会加入团队。同时为了方便数据的访问和操作,数据利益相关者(无论是IT人员还是DevOps人员,或其他人员)也会加入团队。这就是敏捷团队恰到好处。
我们看到了从数据科学到软件开发、从软件开发到数据科学的技术融合的(商业)需求。而这本入门书对这两方面都有好处。在深入分析机器学习算法的机理之前,它与开发人员进行对话并展示ML.NET的实际运行情况(通过Python)。它还与需要了解更多软件需求的数据科学家进行了对话。
如果你是一名软件开发人员,想学习数据科学和机器学习技能,那么本书就是你的理想选择。如果你是一名数据科学家,想学习更多关于软件的知识,那么本书也是非常理想的选择。不过,这两类人员都需要更多地了解对方。
这是本书的理念。我们将其归类为介绍性的,因为它拓展的是宽度而不是深度。它提供了.NET的例子,因为我们认为,尽管Python生态系统非常丰富和繁荣,但是没有理由不去寻找允许你在更接近软件应用程序、软件服务和微服务的基本硬件的情况下进行机器学习的平台,以便最终可以使用任意的学习管道(包括TensorFlow、PyTorch及Python代码)。
谁不应该读本书
这是一本入门级的书,清晰、准确地概述了使用ML.NET平台进行实验的机器学习技术。如果你正在寻找大量的Python示例,那么本书并不是理想选择。如果你正在寻找如何在解决方案(无论是Python还是ML.NET)中复制和粘贴的示例,我们不确定本书是否理想选择。如果你正在寻找算法背后的数学细节,或者一些算法实现的注释,同样,本书也不是理想选择(我们确实包括了一些数学知识,但只是皮毛)。
本书的章节安排
本书分为五个部分。第一部分简要介绍人工智能、智能软件的基础,以及任意机器学习项目在端到端解决方案中的基本步骤。第二部分重点介绍ML.NET库,并概述其核心部分,比如回归和分类等常见问题中的数据处理、训练及评估等任务。第三部分涉及一系列算法的数学细节,这些算法包括线性回归、决策树、集成方法、贝叶斯分类器、支持向量机、K-Means、在线梯度,它们通常被训练用来解决现实生活中的问题。第四部分致力于研究神经网络,当浅层算法都不适用时,神经网络可能会发挥作用。第五部分是关于人工智能(特别是机器学习)的商业愿景,简单回顾了云平台(特别是Azure平台)提供的数据处理和计算的运行时服务。
代码示例
本书中演示的所有代码,包括可能的勘误表和扩展,都可以在MicrosoftPressStore.com/IntroMachineLearning/downloads中找到。
勘误表和图书支持
我们已尽力确保本书及其配套内容的准确性。你可以在MicrosoftPressStore.com/IntroMachineLearning/errata上提交勘误表及其相关更正。如果你发现一个尚未列出的错误,请在同一页面提交给我们。如需更多图书支持,请访问http://www.MicrosoftPressStore.com/Support。
请注意,对微软软件和硬件产品的支持不是通过前面的网址提供的。有关微软软件或硬件的帮助,请访问http://support.microsoft.com。
CONTENTS
目 录
译者序
前言
致谢
作者简介
第一部分 机器学习基础
第1章 人类是如何学习的 2
1.1 迈向思考型机器 2
1.1.1 机器推理的曙光 3
1.1.2 哥德尔不完备定理 3
1.1.3 计算机的形式化 3
1.1.4 迈向人类思想的形式化 4
1.1.5 人工智能学科的诞生 5
1.2 学习机理 6
1.2.1 到底什么是智能软件 6
1.2.2 神经元是如何工作的 7
1.2.3 胡萝卜加大棒法
(软硬兼施) 10
1.2.4 应变能力 12
1.3 人工智能的形式 13
1.3.1 原始智能 13
1.3.2 专家系统 13
1.3.3 自治系统 15
1.3.4 人工的情感形式 17
1.4 本章小结 18
第2章 智能软件 19
2.1 应用人工智能 19
2.1.1 软件智能的发展 19
2.1.2 专家系统 20
2.2 通用人工智能 22
2.2.1 无监督学习 22
2.2.2 监督学习 24
2.3 本章小结 26
第3章 映射问题和算法 27
3.1 基本问题 27
3.1.1 对象分类 28
3.1.2 结果预测 30
3.1.3 对象分组 31
3.2 更复杂的问题 33
3.2.1 图像分类 33
3.2.2 目标检测 34
3.2.3 文本分析 34
3.3 自动机器学习 35
3.3.1 AutoML平台的
特性 35
3.3.2 运行中的AutoML Model Builder 37
3.4 本章小结 40
第4章 机器学习解决方案的
一般步骤 42
4.1 数据收集 42
4.1.1 组织中的数据驱动文化 43
4.1.2 存储选项 44
4.2 数据准备 45
4.2.1 提高数据质量 45
4.2.2 清理数据 46
4.2.3 特征工程 47
4.2.4 最终确定训练数据集 48
4.3 模型选择及训练 50
4.3.1 算法备忘录 51
4.3.2 神经网络案例 53
4.3.3 评估模型性能 54
4.4 模型部署 55
4.4.1 选择合适的主机平台 55
4.4.2 公开API 56
4.5 本章小结 56
第5章 数据因素 58
5.1 数据质量 58
5.1.1 数据有效性 58
5.1.2 数据收集 59
5.2 数据完整性 60
5.2.1 完备性 61
5.2.2 唯一性 61
5.2.3 及时性 61
5.2.4 准确性 61
5.2.5 一致性 62
5.3 到底什么是数据科学家 62
5.3.1 工作中的数据科学家 62
5.3.2 数据科学家工具箱 63
5.3.3 数据科学家和软件
开发人员 63
5.4 本章小结 64
第二部分 .NET中的机器学习
第6章 .NET方式 66
6.1 为什么用或不用Python 67
6.1.1 为什么在机器学习中
Python如此受欢迎 67
6.1.2 Python机器学习库的
分类 68
6.1.3 基于Python模型的端到
端解决方案 70
6.2 ML.NET简介 72
6.2.1 在ML.NET中创建和
使用模型 72
6.2.2 学习环境的要素 74
6.3 本章小结 78
第7章 实现ML.NET管道 79
7.1 从数据开始 79
7.1.1 探索数据集 80
7.1.2 应用公共数据转换 80
7.1.3 关于数据集的注意事项 81
7.2 训练步骤 81
7.2.1 选择算法 82
7.2.2 评估算法的性能 82
7.2.3 计划测试阶段 83
7.2.4 指标预览 83
7.3 从客户端应用程序中预测价格 84
7.3.1 获取模型文件 84
7.3.2 设置ASP.NET应用程序 85
7.3.3 预测出租车费 85
7.3.4 设计适当的用户界面 87
7.3.5 质疑数据和解决问题的
方法 88
7.4 本章小结 88
第8章 ML.NET任务及算法 89
8.1 ML.NET的整体框架 89
8.1.1 涉及的类型和接口 89
8.1.2 数据表示 90
8.1.3 支持的目录 92
8.2 分类任务 94
8.2.1 二值分类 94
8.2.2 多分类 98
8.3 聚类任务 103
8.3.1 准备工作数据 103
8.3.2 训练模型 104
8.3.3 评估模型 105
8.4 迁移学习 107
8.4.1 建立图像分类器的步骤 108
8.4.2 应用必要的数据转换 108
8.4.3 模型的构建和训练 110
8.4.4 关于迁移学习的补充
说明 112
8.5 本章小结 112
第三部分 浅层学习基础
第9章 机器学习的数学基础 114
9.1 统计数据 114
9.1.1 统计平均值 115
9.1.2 统计众数 117
9.1.3 统计中位数 118
9.2 偏差和方差 119
9.2.1 统计学中的方差 120
9.2.2 统计学中的偏差 122
9.3 数据表示 122
9.3.1 五位数总结 122
9.3.2 直方图 123
9.3.3 散点图 124
9.3.4 散点图矩阵 125
9.3.5 以适当的比例绘图 125
9.4 本章小结 126
第10章 机器学习的度量 127
10.1 统计学与机器学习 127
10.1.1 机器学习的最终目标 128