我们需要有人能够对未来可能的新事物抱有梦想,想想为什么以前没有。
——约翰·肯尼迪,1963
今天,数据科学家持续受到热捧。丰富的数据,触手可及的云计算能力,这是机器学习最终的完美世界吗?从表面看,似乎已经有了所有必要的食材来烹制“应用人工智能”(applied AI)。但是,我们实际上仍然缺乏一个明确有效的组合方法。
如同其他学科具有其目的一样,数据科学的目的是证明某些事情是可能的。然而,数据科学本身并不生产解决方案,那是机器学习领域的另一个分支——数据工程——的目的。
各大企业正在热招数据科学家,但好的数据科学团队,其成果通常是可运行的模型,该模型的软件质量往往只是一个原型,而非可投入生产的工件。算法与数据紧密结合,且数据必须是完整、干净和平衡的。这部分工作谁来负责却往往并不明确。如此说来,这样的工作最多也只能算是半成品。然而,对于其业务会产生大量数据的大型组织(如能源公共事业、金融机构和制造业),组建一个与应用AI流水线。“生产”部分脱钩的数据科学团队。预算明显有限的小公司,则以服务方式采购一些应用数据科学的工作成果,这样可能更经济实惠。
从数据科学到生产,通常有一段很长的路要走,也有很多数据方面的工作要做,需要考虑下面几点:
数据如何存储?每天还是每小时?
数据是否要以某种中间格式的方式临时复制?
要想让模型工作的话,需要进行哪些转换?如何实现自动化?
一旦部署到生产环境,该模型的性能如何?
预计要以什么频率重新训练模型以适应实时数据(live data)的需求?
如果重新训练很频繁,又应该如何自动化任何相关任务?
收集最新数据集、运行训练并部署最新模型又该如何进行?
在机器学习模型方面,最大的问题可以追溯到所采用的数据。2021年7月,《麻省理工技术评论》发表了一篇文章,论述了人工智能在新冠疫情下所产生的影响。这篇文章的要点在于,在对适度开发的模型进行大规模审查时,从中发现的许多问题都与研究人员用来开发其工具的数据质量差有关。这样,几乎所有工具几乎都失去了其有效的用途。于是人们开始更好地理解数据工程和数据质量的作用。通过CSV稀疏文件来处理数据对探查某个想法来说是足够的,但要想建立一个健壮的基础结构,还是需要换用别的数据库(关系型、NoSQL或图)和某些严肃的查询语言。而如果需要这样做,就很有可能需要超越Python,进入经典编程语言的领域。也就是说,仅仅掌握数据科学还不够,还必须掌握严肃的编程和数据库技术。另一方面,从数据中寻找和特定业务相关的见解,正是我们最终的目的。
目前,常规意义上的AI(更具体地说就是机器学习)只是垂直问题的商品和直接解决方案之间的一种权衡。商业化的云服务提供安全、稳定和可接受的质量。虽然并不能涵盖所有可能的情况,但它们正在扩展,而且在不久的将来还有更多的扩展。
所有这一切都营造了一个环境,使我们能够构建同样的旧软件,却可以使用更强大的工具。我们不只是在谈论编程语言的基元和由框架提供的一些类。我们还在谈论由机器学习算法和商业化的云服务支持的智能和预测性工具。
在这个背景下,ML.NET完美充当了数据工程和商业化数据科学之间的桥梁,它和.NET Framework完全集成。ML.NET有用于浅层学习的内置算法、对Azure云服务的便利访问以及与预训练模型(如Keras或TensorFlow网络)的
整合。
本书面向的读者
在我们看来,如果您已经在用.NET,那么ML.NET就是做机器学习的完美工具,无论选择的算法和模型的内部机制是什么。
本书针对的是愿意(或需要)进入机器学习世界的.NET开发人员。如果是软件开发人员,想把数据科学和机器学习技能添加到自己的技能库中,那么本书就是理想的选择。如果是数据科学家,愿意学习更多Python以外的软件知识,那么本书也是一个理想的选择。
本书不面向的读者
本书从ML.NET的角度讨论机器学习。ML.NET是一个特定于平台的库。它主要是为数据工程师和机器学习工程师(而不是普通的数据科学家)量身定制的。这里澄清一下,机器学习工程师的核心职责是将外部训练好的模型实际融入到客户应用程序中执行更精细的任务,并对建立和训练基于数据科学规范的模型的过程进行监督。本书讨论如何选择具体的工具。
如果对机器学习解决方案的实际生产没有多大兴趣,这本书可能不是最理想的参考。它并不会展示前沿的数据科学技术,不过会教你如何开始利用ML.NET团队多年来一直在做的事情——在.NET中整合简单而有效的机器学习解决方案。
本书的组织方式
本书分为三部分。
第1章~第3章对ML.NET库进行基础性的概述。
第4章~第10章概述如何对常见问题进行数据处理、训练和评估等专门任务。这些问题包括回归、分类、排名和异常检测等。
第11章~第13章专门讨论所有浅层学习任务都不合适的场景下可能需要用到的神经网络。此外还要概述神经网络,提供一个同时使用商业化Azure认知服务和“手工打造”的定制Keras网络的护照识别的例子。
最后,附录要讨论模型的可解释性。
系统需求
要想完成本书的练习,需要准备好以下软硬件:
一台运行Windows 10/11,Linux或macOS的计算机
任意版本的Visual Studio 2019/2021或者Visual Studio Code
接入互联网,以便下载软件和本书示例文件
代码示例
书中所有代码(包括可能的勘误和补充内容)都可以通过以下网址获得:
https://MicrosoftPressStore.com/ProgrammingMLNET/downloads