本节书摘来异步社区《机器学习与数据科学(基于R的统计学习方法)》一书中的第1章,第1.3节,作者:【美】Daniel D. Gutierrez(古铁雷斯),更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.3 机器学习的过程
当在一个数据科学项目中工作时,总览机器学习的整个工作流程来决定应遵循的技术路线是十分有用的。在本节中,我会提供一个详细的工作流程,你可以在机器学习项目中使用它,它适用于几乎所有项目。如果你基于某些特定领域的需要,想对流程进行增改,请随意创造属于你的流程,以便未来重复使用。图1-2的简图描绘了一般情形下的工作 流程。
![c2468cb628401b5acfa4d50d978a5c8303d60173](https://i-blog.csdnimg.cn/blog_migrate/b3e77745ef7ceb1d64970ab2aad27e11.png)
鉴于这是本书后续章节的模板,让我们一步步检查数据科学的流程。当你获得更多经验后,你会想要在此基础模型中增加更多细微的环节,但即使经过调整,流程在大体上还是一致的。
1.理解问题。深入理解问题范畴,寻求该领域专家的帮助,如解释商业考量、提供数据集、确定关键变量等。最重要的是明确项目的目标。例如,要预测或是发现什么。任何机器学习的项目,如果没有清晰的目标的话,将会后患无穷。如果项目的甲方只是简单地跟你说:“这里有一些数据,现在你可以用它来露一手了”。你可能会被吓跑,因为根据如此不现实的表述来提供结果是很困难的。相反,花时间执行流程的所有步骤,并且确保每一位项目相关人员都能参与进来,会使项目顺利进行。根据项目的不同,你可能需要与从事市场、金融、实业、IT甚至人力资源行业的人打交道。你将经常需要从多个部门获得资源。正确的接近数据科学的方法是,从一个对你的商业有着根深蒂固影响的问题开始,基于问题,反过来考虑数据分析和所需要的数据集。洞察力不会凭空产生,它们伴随着努力分析数据和为解决真实问题建模而到来。有时,商业问题和数据科学应用之间的关系十分清晰,就像在正确辨别信用卡欺诈交易的场景中一样。在其他情况下,分离商业问题和数据科学应用可能有多个步骤。一个数据科学工程的原始和最终驱动力,通常基于部门级需求(例如,金融、销售、市场等),并且不是源于IT部门的需求,虽然工厂部门可能需要向你提供用来做机器学习的数据集。
2.获得数据集。用于分析的数据可以从数据库或者数据集市中获得。在一些情况下,数据可能从生产系统中提取,例如,一个电子商务应用。最近越来越多的机器学习项目中使用的数据来自多种数据源,包括非结构化数据,例如社会媒体甚至是电子邮件。这就是为什么数据采集过程需要你具有创造力,并且有相关领域的专家提供帮助(诸如一个能给你提供销售数据或者薪资数据的主管)。这一步可能涉及IT部门,需要数据库工程师为你切分提取出数据。
3.处理数据。在项目的起始阶段,将数据进行清洗,并将原始数据转换成更适合机器学习的数据格式等数据处理任务是十分重要的。对于一些企业数据的状态来说(脏数据、数据不一致、数据缺失等),这一步可能要花费相当多的时间和精力。
4.使用探索性数据分析。使用统计方法和图表来发掘数据中有趣的特征和模式。有时,对原始数据(或者原始数据的采样)进行绘图,就能揭示出重要的信息,它能帮助你决定项目的研究方向,或者至少能在解释机器学习工程的结果时提供一个关键的思路。
5.执行特征工程。使用探索性数据分析决定最优的特征变量,在你准备使用的机器学习算法中应用。这个步骤可能需要与相关专家讨论在什么层面上进行探索性数据分析。当然,你需要明确地知道每个特征变量为算法预测精确度带来的提升程度。
6.选择一个模型。选择一个适合解决现有问题的机器学习算法,并把你的数据集分为训练集、交叉验证集和测试集(详细内容见第7章)。在现阶段,你需要确定将要使用的机器学习的类型。你想做一个定量的预测、定性的分类,还是仅仅使用聚类技术进行探索?当你在机器学习领域积累一些经验后,你将能更容易判断在某个应用中使用什么算法最合适。
7.验证模型。没有一个算法,在使用任何数据集的情况下都能打败其他任何算法。对于一个特定的数据集来说,某个算法可能有最好的结果,然而使用不同的数据集之后,其他算法可能效果更好。因此,对于任何给定的数据集,判断哪个方案能产生最好的结果,是一个非常重要的任务。在实践中,选择一个最好的方案是机器学习中最具有挑战性的部分之一。因此,对模型的性能评估(performance evaluation)是项目成功的关键。我们需要测定预测和实测数据的拟合程度,也就是说,我们需要将预测结果值和真实的响应值的接近程度进行量化。我们还需要确定过度拟合的程度,例如,给出的一个算法产生了少量的训练结果错误,但有大量的测试结果错误。特别地,我们还需要评估模型的适用性。更进一步,我们需要决定偏向减少方差还是减少偏差(这是第7章的一个主题)。在第7章中,我们将寻找同时满足低方差和低偏差的算法。
8.数据可视化(data visualization)。一个机器学习项目的最终结果用一个制作精良的可视化(能准确传达算法告诉我们关于数据的本质)来表示最易被理解。传达合适信息的数据可视化并不容易创造,可能需要多次尝试才能成功。事实上,建立有效的可视化需要一定程度的创造力和艺术天分。好在,互联网充满了大量有效可视化的例子,你可以用它们来想出你自己的方向。
9.交流结果。一旦你完成了数据科学部分的处理,你要准备和决策者讨论结果。为了使这一切行之有效,你需要成为一个“数据说书人”,基于数据展示的内容,能讲一个令人信服的故事。要知道大多数经理人没有在数据分析或统计方面的背景知识,你的工作是把结果展现成一个典型的商人可以理解的形式。为了能针对结果采取行动,决策者必须明确知道正在讨论什么——不是在数据科学意义上讲,而是在可行的商业智慧的意义上。这很不容易,但是讲数据的故事是成为一个数据科学家不可或缺的一部分。
10.部署到生产环境。一旦项目完成,下一步重要的工作是将机器学习解决方案部署到生产环境中。这个环境采用的形式取决于这个工程的目标。如果你在创造一个推荐系统,那么部署可能意味着给电商网站增加功能;如果你在创造一个客户流失率预测器,那么部署可能意味着营销系统的一个补充;或者如果你致力于一个帮助完成销售交易的网站,那么可能没有任何实际意义上的部署,而是在销售部门标准作业程序(SOP,Standard Operating Procedure)文件上的改变(例如,在7次电话后继续给潜在客户打电话,会带来收益递减)。在生产环境中部署基于R的机器学习解决方案,你也需要特殊的工具。本章后面会讨论这个内容。
在上面这些指引之后,对任何机器学习项目来说都有一些重要的目标。第一,算法的结果应该是可解释的;换言之,组织中的领域专家应该能理解(当然,在你的帮助下)该算法展示了数据的什么内容。接下来,结果需要足够简单,能够解释清楚,与一个极度复杂的解决方案相反,这其中的很大部分取决于你把技术翻译成可行的商业智能的能力。你经常要对精确度进行折衷,换句话说,你会牺牲一些精确度来提高可解释性和简单性吗?如果你牺牲了太多的精度,那么你可能需要重新考虑其他影响因素(例如,牺牲一些简单性换取精确度可能是值得的)。算法也必须快速。这意味着建立模型和用小样本测试它都应该是简易的。最后,算法应该是可伸缩的,这意味着它很快速或是能并行处理多个样本,易于应用在海量数据集中。