前言
在当前自动化、云计算、算法、人工智能和大数据的世界中,很少有主题像数据科学和机器学习如此相关。它们的流行不仅在于它们对现实生活问题的适用性,还在于它们天然地融合了许多不同的学科,包括数学、统计、计算机科学与工程和金融。
对于开始学习这些主题的人来说,大量的计算方法和数学思想可能会让你不知所措。有些人可能只满足于学习如何将现成的算法应用于实际情况。但是,如果黑盒算法的假设被违背了,我们还能相信其结果吗?该如何调整算法?要真正理解数据科学和机器学习,重要的是理解其背后的数学和统计知识,以及由此产生的算法。
本书的目的是提供易于理解,但内容全面的数据科学和机器学习清单。它面向任何有志于更好地理解数学和统计学知识的人,这些知识是数据科学中丰富多样的思想和机器学习算法的基础。我们认为,虽然计算机语言更迭不息,但潜在的关键思想和算法将永远存在,并将成为未来发展的基础。
在开始介绍本书主题之前,我们想说几句撰写本书的哲学。这本书源于澳大利亚昆士兰大学和新南威尔士大学的数据科学和机器学习课程。教授这些课程时,我们注意到学生们不仅渴望学习如何应用算法,而且还渴望了解这些算法的工作原理。然而,许多现有的教科书要么背景知识(如测度论和泛函分析)太多,要么背景知识太少(大多都是黑箱算法),经常脱节和相互矛盾的网络资源又会造成信息过载,这使学生们更难逐步建立自己的知识体系。因此,我们想写一本关于数据科学和机器学习的书,将相关内容像故事一样串起来,并在附录中给出重要的“故事背景”。“故事”由浅入深,逐渐发展起来。附录包含了所有必要的背景知识,例如线性代数与泛函分析(附录A)、多元微分与优化问题(附录B)以及概率与统计(附录C)。此外,为了让抽象的思想变得生动,我们相信让读者看到理论直接转化为算法的实际实现过程是很重要的。经过深思熟虑,我们选择Python作为编程语言。Python是免费提供的,并已被许多数据科学和机器学习从业者选作编程语言。它有许多好用的数据操作包(通常从R语言移植而来),其设计让编程更容易。附录D对Python进行了详细介绍。
为了使本书篇幅合理,我们必须对主题做出选择。重要思想和各种概念之间的联系通过加粗字体来突出显示。关键定义和定理通过加框来突出显示。我们尽可能地提供了定理的证明。最后,我们非常重视数学符号。通常情况下,一旦用一致和简洁的符号系统表示,看似困难的想法会突然变得显而易见。我们使用不同的字体来区分不同类型的对象。向量、矩阵用黑斜体字母表示,如x和X,并通过大写和小写字母来区分随机向量和它们的值,例如X表示随机向量,x表示随机向量的值或结果。集合通常用书法体字母G、H来表示。概率和期望的符号分别是P和E。概率分布由无衬线字体表示,如Bin和Gamma,普遍使用的正态分布和均匀分布符号N和U除外。“数学符号”中汇总了最重要的符号和缩写。
数据科学为理解和处理数据提供了必要的语言和技术。它涉及数字数据的设计、收集、分析和解释,目的是提取模式和其他有用信息。机器学习与数据科学密切相关,它研究从数据中学习的算法和计算机资源的设计。本书内容的组织大致遵循数据科学项目研究的典型步骤:收集数据以获得要研究问题的相关信息;数据清洗、汇总和可视化;数据建模和分析;将模型的决策转化为关于研究问题的决策和预测。由于本书面向数学和统计学,因此重点将放在建模和分析上。
第1章首先介绍如何使用Python中的数据操作包pandas来读取、构造、汇总和可视化数据。虽然本章涵盖的内容不涉及数学知识,但它是数据科学的一个明显的切入点:更好地理解可用数据的性质。第2章介绍统计学习的主要内容。我们区分了监督学习和无监督学习技术,讨论了如何评估(无)监督学习方法的预测性能。统计学习的重要部分是数据建模,我们介绍了数据科学中各种有用的模型,包括正态线性模型、多元正态模型和贝叶斯模型。机器学习和数据科学中的许多算法都使用了蒙特卡罗方法,因此第3章介绍蒙特卡罗方法。蒙特卡罗方法可用于模拟、估计和优化。第4章介绍无监督学习,讨论诸如密度估计、聚类和主成分分析等方法。第5章介绍监督学习,解释许多回归模型背后的思想。在这一章,我们还描述了如何使用Python的statsmodels包来定义和分析线性模型。第6章在第5章的基础上提出了核方法和正则化的强大概念,利用再生核希尔伯特空间理论,使得第5章的基本思想得以巧妙地展开。第7章介绍分类任务,这种任务也属于监督学习框架,因此这章考虑各种分类方法,包括贝叶斯分类、线性判别分析和二次判别分析、K近邻和支持向量机。第8章探讨利用树结构进行回归和分类的通用方法。第9章探索神经网络和深度学习的工作原理,证明这些学习算法具有简单的数学解释。每章的结尾都提供了大量的练习。
每一章的Python代码和数据集可以从GitHub网站https://github.com/DSML-book下载。
致谢
第1章和第5章的一些Python代码改编自文献[73]。感谢Benoit Liquet提供这些代码,也感谢Lauren Jones将R代码转换成Python代码。
感谢所有通过评论、反馈和建议为本书做出贡献的人,他们是Qibin Duan、Luke Taylor、Rémi Mouzayek、Harry Goodman、Bryce Stansfield、Ryan Tongs、Dillon Steyl、Bill Rudd、Nan Ye、Christian Hirsch、Chris van der Heide、Sarat Moka、Aapeli Vuorinen、Joshua Ross、Giang Nguyen以及匿名的评论者。David Grubbs作为本书的编辑,他的专业精神和对细节的关注值得特别称赞。
本书在澳大利亚数学科学研究所2019年暑期班进行了测试,80多名优秀的高年级本科生(优等生)在Zdravko I.Botev讲授的“机器学习的数学方法”课程中使用了本书。感谢他们提供宝贵的反馈意见。
特别感谢Robert Salomone、Liam Berry、Robin Carrick和Sam Daley,他们针对全书内容给出了非常详细的评论意见,并编写、改进了我们的Python代码。他们的热情、洞察力和善意的帮助是无价的。
当然,如果没有家人的爱心支持、耐心陪伴和鼓励,这些工作是不可能完成的,我们由衷地感谢他们。
本书得到了澳大利亚研究委员会数学与统计前沿卓越中心的资助,资助编号为CE140100049。
Dirk P. Kroese、Zdravko I. Botev、Thomas Taimre和Radislav Vaisman布里斯班、悉尼