spark机器学习笔记:设计机器学习系统

来源:互联网 发布:网络用语吃鸡什么意思 编辑:程序博客网 时间:2024/05/29 03:20

感想

  这是一篇机器学习通俗的讲解,我觉得讲得蛮好,特别是我们在设计机器学习系统的时候该怎么做?不是只设计一个机器学习算法就完了,还有很多的事情要做,本文对数据预处理归纳的挺全的,因为从用户获取的数据,不能直接用于机器学习模型的,中间还需要经历数据清洗等操作,我借此分享给大家,此文章不涉及理论内容,可作为入门或者科普,通俗易懂。

介绍


现代的大数据场景包含如下需求。
1. 必须能与系统的其他组件整合,尤其是数据的收集和存储系统,分析和报告以及前段的应用。
2. 易于拓展且与其他组件相对独立。理想情况下,同时具备良好的水平和垂直可拓展性。
3. 支持高效完成所需类型的计算,即机器学习和迭代式分析应用。
4. 最好能同时支持批处理和实时处理。
Spark作为一个框架本身能满足上述需求。然而我们还需确保基于它设计的机器学习系统也满足这些需求。若算法的实现存在能引发系统故障的瓶颈,比如不再能满足上述某些需求,那实现就没多大意义。


1.MovieStream介绍


为便于我们的架构设计,假设存在一个贴近现实的情景。假设我们受命领导MovieStream数据科学团队。MovieStream是一家假想的互联网公司,为用户提供在线电影和电视节目的内容服务。

MovieStream现有系统可概括为

如图所示,向用户推荐哪些电影和节目以及在站点的何处显示,都由MovieStream内容编辑团队负责。该团队还负责MovieStream的群发营销,包括电子邮件和其他直销渠道。现阶段,MovieStream以汇总的方式来收集用户的电影浏览记录,并能访问一些用户注册时所填写的资料。此外,他们还能访问其所收录的电影的一些基本元数据。


随着业务快速发展,新发布的电影和用户的活动不断增加,MovieStream团队愈发难以跟上这样的趋势。MovieStream的CEO之前对大数据,机器学习和人工智能有过较多的了解。他希望我们能为MovieStream创建一个机器学习系统,以处理现在由内容团队人工处理的许多内容。

2. 机器学习系统商业用例

为什么要使用机器学习?为何不直接仍以人工方式来支持MovieStream?使用机器学习的理由有很多,其中最为重要的几点有:
a. 涉及的数据规模意味着完全依靠人工处理会很快跟不上MovieStream的发展;
b. 机器学习和统计模型等基于模型的方式能发现人类(因数据集量级和复杂度过高)难以发现的模式;
c. 基于模型的方式能避免个人或是情感上的偏见(只要应用时足够细心且正确)。

然而,没有任何理由说基于模型和基于人工的处理和决策不能并存。比如,许多机器学习系统依赖已标记的数据来训练模型。通常来说,标记数据代价高昂,耗时且需人工参与。文本数据分类和文本的情感标识便是很好的例子。许多现实中的系统会采取某种人力机制来为数据生成标识,并用于训练模型。之后,这些模型则部署到在线系统中用于大规模环境下的预测。

在MovieStream的案例中,我们并不需要担心机器学习的引入会使得内容团队多余。事实上,我们的目标是让机器学习来负担那些耗时且机器擅长的任务,并向内容团队提供工具以帮助她们更好地理解用户和内容。比如,帮助他们确定向电影库中新增哪些电影(新增电影代价高昂,而且对业务至关重要)。

2.1个性化


对于MovieStream的业务来说,个性化或许是机器学习最为重要的潜在应用。一般来说,个性化是根据各种因素来改变用户体验和呈现给用户内容。这些因素可能包括用户的行为数据和外部因素。

推荐从根本上说是个性化的一种,常指向用户呈现一个他们可能感兴趣的物品列表。推荐可用于网页(如推荐相关产品),电子邮件,其他直销渠道或移动应用等。

个性化和推荐十分相似,但推荐通常专指向用户显式地呈现某些产品或是内容,而个性化有时也偏向隐式。比如说,对MovieStream的搜索功能个性化,以根据该用户的数据来改变搜索结果。这些数据可能包括基于推荐数据(搜索产品或内容时),或基于地理位置和搜索历史等各种数据。用户可能不会明显感觉到搜索结果的变化,这就是个性化更偏向隐性的原因。

2.2 目标营销和客户细分

目标营销用与推荐类似的方法从用户群中找出要营销的对象。一般来说,推荐和个性化的应用场景都是一对一,而客户细分则试图将用户分成不同的组。其分组根据用户的特征进行,并可能参考行为数据。这种方法可能比较简单,也可能使用了某种机器学习模型,比如聚类。但无论如何,其结果都是对市场的若干细分。这些细分或许有助于理解各组用户的共性,同组用户之间的相似性,以及不同组之间的差异。

这些将能版主MovieStream理解用户行为背后的动机。相比个性化的一对一营销,它们甚至还能有助于制定针对用户群的更为广泛的营销策略。

当没有已标记数据时,这些方法能帮助制定营销策略,而非采取一刀切的方法。

2.3预测建模与分析


第三种机器学习的应用领域是预测分析。这个词的范围很宽泛,甚至从某种意义上说还覆盖推荐,个性化和目标营销。再考虑到推荐和市场细分有所区别,这里用预测建模(predictive modeling)来表示其他做预测的模型。借助活动记录,输入数据以及内容属性,MovieStream可以创建一个回归模型(regression model)来预测新电影的市场表现。

另外,我们也可以用分类模型(classification model)来对只有部分数据的新电影自动分配标签,关键字或分类。

3. 机器学习模型分类


以上应用案例和方法可分为如下几种。
¬ 监督学习(supervised learning):这种方法使用已标记数据来学习。推荐引擎,回归和分类便是例子。它们所使用的标记数据可以是用户对电影的评级(对推荐来说),电影标签(对上述分类例子来说)或是收入数字(对回归预测来说)。
¬ 无监督学习(unsupervised learning):一些模型的学习过程不需要标记数据,我们称其为无监督学习。这类模型试图学习或是提取数据背后的结构或从中抽取最为重要的特征。聚类,降维和文本处理的某些特征提取都是无监督学习。


4. 数据驱动的机器学习系统的组成


从高层设计来看,我们的机器学习系统的组成如下图,其中展示了机器学习的流程。该流程始于从数据存储处获取数据,之后将其转换为可用于机器学习模型的形式。随后的环节有对模型的训练,测试和完善,以及将最终的模型部署到盛昌系统中。有新数据产生时则重复该流程。


4.1 数据获取与存储

机器学习流程的第一步是获取训练模型所需的数据。与其他公司类似,MovieStream的数据通常来自用户活动,其他系统(通常称作机器生成的数据)和外部数据源(比如某个用户访问站点的时间和当时的天气)。

获取这些数据的途径很多,比如收集浏览器里用户的活动记录,移动应用的事件日志或通过外部网络API来获取地理或天气信息。

获取数据后通常将其存储起来。要存储的数据包括:原始数据,即时处理后的数据,以及可用于生产系统的最终建模结果。

数据存储并不简单,可能涉及多种系统。文件系统,如HDFS,Amazon S3等;SQL数据库,如MySQL或PostgreSQL;分布式NoSQL数据存储,如HBase ,Cassandra和DynamoDB; 搜索引擎Solr和Elasticsearch; 流数据系统,如Kafka,Flume和Amazon kinesis.

4.2 数据清理与转换

大部分机器学习模型所处理的都是特征(feature)。特征通常是输入变量所对应的可用于模型的数值表示。

虽然我们希望将大部分时间用于机器学习模型探索,但通常经上述途径获取到的数据都是原始形式,需要进一步处理。比如我们记录的一些用户事件的细节,比如用户查看电影页面的时间,观看某部电影的时间或给出某些反馈的时间。我们还可能收集了一些外部信息,比如用户的位置(通过他们的IP查到)。这些时间日志通常由一些文字或数值信息组合而成。

绝大部分情况下,这些原始数据都需要经过预处理才能为模型所使用。预处理的情况包括以下几种。
1. 数据过滤:比如我们想从原始数据的部分数据中创建一个模型,而所需数据只是最近几月的活动数据或是满足特定条件的事件数据。
2. 处理数据缺失,不完整或有缺陷:许多现实中的数据集都存在某种程度上的不完整。这可能包括数据缺失(比如用户没有输入),数据存在错误或是缺陷(比如数据收集或存储时的错误,又或是技术问题或漏洞,以及软硬件故障)。可能要过滤掉非规整数据,或通过某种方式来填充缺失的数据点(比如选取数据集的平均值来作为缺失点的值)。
3. 处理可能的异常,错误和异常值:错误或异常的数据可能不利于模型的训练,所以需要过滤掉,或是通过某些方法来处理。
4. 合并多个数据源:比如可能要将各个用户的事件数据与不同的内部数据或是外部数据合并。内部数据如用户属性;外部数据如地理位置,天气和经济数据。
5. 数据汇总:某些模型需要输入的数据进行过某种汇总,比如统计各用户经历过的事件类型的总数目。

对数据进行初步预处理后,需要将其转换为一种适合机器学习模型的表示形式。对许多模型类型来说,这种表示就是包含数据的向量或矩阵。数据转换和特征提取时常见的挑战,包括以下这种情况。
¬ 将类别数据(比如地理位置所在的国家或是电影的类别)编码为对应的数值表示。
¬ 从文本数据提取有用信息。
¬ 处理图像或是音频数据。
¬ 数值数据常被转换为类别数据以减少某个变量的可能值的数目。例如将年龄分为几个段(比如25~35,45~55等)
¬ 对数值特征进行转换。比如对数值变量应用对数转换,这会有助于处理值域很大的变量。
¬ 对数值特征进行转换。比如对数值变量应用对数转换,这会有助于处理值域很大的变量。
¬ 对特征进行正则化,标准化,以保证同一模型的不同输入变量的值域相同。
¬ 特征工程是对现有变量进行组合或转换以生成新特征的过程。例如从其他数据求平均数,像求某个用户看电影的平均时间。
这些数据清理,探索,聚合和转换步骤,都能通过Spark核心API,SparkSQL引擎和其他外部Scala, Java或Python包做到。借助Spark的hadoop功能还能实现上述多种存储系统上的读写。

4.3 模型训练与测试回路

当数据已换为可用于模型的形式,便可开始模型的训练和测试。在这个部分,我们主要关注模型选择(model selection)问题。这可以归结为对特定任务最优建模方法的选择,或是对特定模型最佳参数的选择问题。在许多情况下,我们会想尝试许多模型并选出表现最好的那个(各模型都采用了最佳的参数时)。因而,这个词在现实中经常同时指代这两个过程。在这个阶段,探索多个模型组合(esemble method)的效果也很常见。

在训练数据集上运行模型并在测试数据集(即为评估模型而预留的数据,在训练阶段模型没有接触过该数据)上测试其效果,这个过程一般相对直接,被称作交叉验证(cross-validation)。

然而我们所处理的通常是大型数据集。这样,先在具有代表性的小样本数据集上进行初步的训练-测试回路,或是尽可能并行地选择模型,都会有所帮助。Spark内置的机器学习库MLib完全能胜任这个阶段的需求。

4.4 模型部署与整合

通过训练测试循环找出最佳模型后,要让它能得出可付诸实践的预测,还需将其部署到生产系统中。这个过程一般要将已训练的模型导入特定的数据存储中。该位置也是生产系统获取新版本的地方。通过这种方式,实时服务系统能在训练模型时进行周期性的更新。


4.5 模型监控与反馈

监控机器学习系统在生产环境下的表现十分重要。在部署了最优训练的模型后,我们会想知道其在实际中的表现如何:它在新的未知数据集上的表现是否符合预期?其准确度怎么样?毕竟不管之前的模型选择和优化做得如何,检验其实际表现的唯一方法是观察其在生产环境下的表现。

同样值得注意的是,模型准确度和预测效果只是现实中系统表现的一部分。通常还应该关注其他业务效果(比如收入和利润率)或用户体验(比如站点使用时间和用户总体活跃度)的相关指标。多数情况下很难将它们与模型预测能力直接关联。推荐系统或目标营销系统的准确度可能很重要,但它只与我们真正关心的那些指标(如用户体验度,活跃度以及最终收入)间接相关。

所以,现实中应该同时监控模型准确度相关指标和业务指标。我们可以尽可能在生产系统中部署不同的模型,通过调整它们而优化业务指标。实践中,这通常通过在线分割测试(live split test)进行。然而,做好这类测试并不容易。在线测试和实验可能引发错误,也可能效果不好,或者会使用基准模型,这些都会给用户体验和收入带来负面影响,故其代价高昂。

本阶段另一个重要的方面是模型反馈(model feedback),指通过用户的行为来对模型的预测进行反馈的过程。在现实系统中,模型的应用将影响用户的决策和潜在行为,从而反过来将从根本上改变模型自己将来的训练数据。

举例来说,假设我们部署了一个推荐系统。由于推荐实际上限制了用户的可选项,从而影响了用户的选择。我们希望用户的选择不会受模型的影响,然而这种反馈回路会反过来影响模型的训练数据,并最终对模型准确度和重要的业务指标产生不利影响。

好在我们可以借助一些机制来降低反馈回路的这种负面影响,比如提供了一些无偏见的训练数据。这类数据来自那些没有被推荐的用户,又或者在一开始就考虑到这种平衡需求而划分出来的客户。这些机制有助于对数据的理解,探索以及利用已有的经验来提升系统的表现。

4.6 批处理或实时方案的选择

模型用所有的数据或一部分数据进行周期性的重新训练。由于上述流程会花费一定的时间,这就使得批处理方法难以在新数据到达时立即完成模型的更新。

本书讨论的是批处理机器学习方法,但的确存在一类名为在线学习(online learning)的方法。它们在新数据到达时便能立即更新模型,从而使实时系统成为可能。常见的例子有对线性模型的在线优化算法,如SGD。我们可以通过例子来学习该算法。这类方法的优势在于其系统将能对新的信息和底层行为(即输入数据的特征或是分布会随时间变化,现实中的绝大部分情况都会如此)作出快速的反应和调整。

但在实际生产环境中,在线学习模型也会面对特有的挑战。比如,对数据的获取和转换难以做到实时。在一个纯在线环境下选择适当的模型也不简单。在线训练和模型选择以及部署阶段的延时可能难以达到实时性的需求(比如在线广告对延时的需求是以毫秒计)。最后,批处理框架不适合对本质为流的数据进行实时处理。

现实中的实时机器学习系统具有天生的复杂性,故实践中大部分的系统都以近实时性为设计目标。这是一种混合方法,它并不要求模型一定在数据到达时立即更新。相反,新的数据会被收集为小批量的训练数据,再输入给在线学习算法。大部分情况下,该方法会周期性地进行某种批处理。处理的内容可能包括在整个数据集上重新计算模型,或是更为复杂的某些数据处理以及模型的选择。这些能保证实时模型的表现不会随时间推移而变差。

另一种类似的方法是,在周期行批处理中进行重新计算时,若有新的数据到来则只对更复杂的模型进行近似更新。这样模型可从新的数据学习,但有短暂延迟。因为近似更新,所以模型的准确度会随着时间推移而下降。但周期性地在所有数据上重新计算模型能弥补这一点。

5 .机器学习系统架构



如图所示,该系统包含了早先机器学习流程示意图的内容,此外还包括:

Ø 收集与用户,用户行为和电影标题有关的数据;

Ø 将这些数据转为特征;

Ø 模型训练,包括训练-测试和模型选择环节;

Ø 将已训练模型部署到在线服务系统,并用于离线处理;

Ø 通过推荐和目标页面将模型结果反馈到MovieStream站点;

Ø 将模型结果返回到MovieStream的个性化营销渠道;

Ø 使用离线模型来为MovieStream的哥哥团队提供工具,以帮助其理解用户的行为,内容目录的特点和业务收入的驱动因素。


原创粉丝点击