数据分析与机器学习

在经过简化的典型数据科学工作流中,数据科学家们主要负责准备机器学习所需数据、使用训练数据集进行算法训练、针对独立的验证数据集评估算法性能、完善数据准备与算法以重新训练,最后将算法打包进一套生产级部署框架当中。

AWS为机器学习场景下的服务提供多种抽象级别。在抽象级最高的层级上,AWS AI服务(例如Amazon Polly、Amazon Lex、Comprehend以及Amazon Rekognition)负责提供经过预训练的API终端节点,用于根据输入数据进行推理。而在抽象服务的中间层内,平台服务(例如Amazon Machine Learning、Amazon SageMaker、EMR with SParkML以及用于数据标记的Mechanical Turk)负责在加快算法开发的同时,帮助用户摆脱由基础资源管理带来的日常负担。最后,抽象度最低的层级涵盖各类框架与基础设施(包括TensorFlow、PyTorch与Apache MXNet等经过预配置的流行框架),结合CPU与GPU优化机制共同支撑起AWS Deep Learning AMI功能。具体选择哪一种机器学习堆栈,主要取决于您当前面对的业务问题、以及开发团队的知识与经验水平。

在本课程中,我们无法具体介绍数据科学算法的开发细节,下面仅简单解释目前机器学习领域几种常见的大数据准备、捕捉与使用方法。

在大多数业务环境中,数据被存储在集中存储库或者分布在多个存储库内。此存储库可以是Amazon S3、EMR等Hadoop框架、RDS等关系数据库、DynamoDB等NoSQL数据库数据仓库或者多种存储方案的组合(例如与Hive相兼容的元存储)。但在业务流程中直接收集到的原始数据往往太过粗糙,必须经过清洗才能供机器学习应用使用。大多数机器学习算法都会对数据素材提出相当严格的要求,例如避免null值。对数据科学家们来说,日常工作中的大部分内容正是为机器学习模型准备数据。相关最佳实践建议我们开发出健壮且自动化的数据管道,将企业收集到的原始数据聚合起来,并转换为可支持机器学习模型的数据集。数据集的不断扩展往往推动模型性能达到新的高度,具体扩展方法则包括数据列规范化或组合、建立标记化文本语料库、或者将视频预处理为单一帧以进行特征工程等等。

在AWS上,Glue作业、EMR以及Data Pipeline数据管道等托管ETL服务显著减少了数据转换负担,同时为用户直接提供多步骤业务流程编排中所必需的服务器管理方案。通过将AWS基础设施视为可直接调用的代码,同时配合AWS API终端节点进行服务交付,数据科学家们得以轻松开发出清洗管道并实现版本控制,也能在此期间总结出有助于其他数据科学家的最佳实践与心得。

通过顺序管道进行分段、清洗与特征工程,将帮助我们极大提升模型的开发速度。对于仅面向较小型数据集的特征工程任务相比,面对大规模原始数据集的特征工程往往要求我们首先对该数据集进行数据采样,进而整理出一套更加清洁的小型数据集。根据良好架构原则中提出的性能效率支柱,我们应针对管道中的不同阶段采用适当的实例类型。对于数据科学家们来说,在处理ETL清洗管道的终端一侧,最好的作法是将清洗后的数据存储在独立的数据存储当中,例如Amazon S3。这些面向机器学习模型开发场景的独立数据存储方案能够保证模型训练与模型运行之间的数据瑟,进而为评估模型改进提供稳定的底层基准。而另一项良好架构支柱——成本优化支柱——则建议我们将计算与存储资源区分开来,借此实现成本优化。

为了解决实际业务问题,我们需要部署机器学习模型,并引导其利用新数据完成推理。相关最佳实践要求在原始数据存储中添加机器学习上下文的额外标记数据,这项操作被称为“数据增强”。数据增强的具体操作,包括记录新数据、推理以及实际数据点中的“基本事实(ground truth)”。例如,我们可以借此推理某些“最佳”广告能否面向特定客户群体提高销售转换率。在通过重复训练衡量并改善模型性能方面,基本事实数据具有无可比拟的价值。但在某些情况下,我们往往无法在特定时间段内获取基本事实,因此需要采取将推理与结果相关联的跟踪方法。

特点

  • 您希望使用机器学习来解决业务问题。
  • 您拥有大量数据,而这些数据间的关系很难通过传统仓库工具实现可视化。
  • 您希望确定稀疏数据集中的关系与趋势,例如实现产品推荐功能。
  • 您希望根据历史数据做出预测,例如预测用户流失情况。
  • 您希望实时改善业务功能,例如投放最有利于销售转化的广告内容。
  • 您希望实时改善业务功能,例如根据传感器数据预测零件故障。

参考架构

  1. 原始数据存储。原始数据存储,通常是指用于摄取与存放数据的数据存储方案。
  2. 数据清洗管道负责将原始数据转换为可供机器学习直接使用的数据集。
  3. 将用于训练的数据存储在另一存储库内,例如写入至Amazon S3、HDFS存储或者元存储中。
  4. 机器学习模型的开发涉及多种框架,包括Amazon SageMaker、SparkML on EMR、运行Deep Learning AMI的GPU实例,以及R、Python或Scala等语言。
  5. 将机器学习模型打包至生产端点当中,其通常位于推理API之后。
  6. 在生产环境中,向机器学习部署方案提供新数据,并使用其推理结果解决业务需求。
  7. 在生产部署期间捕捉到的数据将配合适当标记被统一存储,管道将定期使用这些数据重新训练模型。

配置说明

  • 我们需要经常清除机器学习数据中的缺失字段、标记数据内容、对特征进行“工程设计”,借此减少或合并无关的列/特征。此外,机器学习训练通常只需要全体可用数据中的一个子集,因此业界通常会选择下采样方法以加快模型训练速度,进而缩短学习/改进周期。
  • 在模型准备期间,数据一致性同样至关重要。只有保证一致性,我们才能将更新后的模型与之前的版本进行准确比较。训练数据集与“保留”或验证数据集可以分别存储,供后续用于模型训练与评估。
  • 在计算资源的成本优化方面,请选择正确的实例类型进行训练与推理。例如,GPU优化型实例可以加快神经网络模型的训练速度,而通用型实例则更适合运行NN模型中的API推理。
  • 通过扇出资源(例如Amazon SageMaker或SPOT市场资源)使用不同的调整参数(即超参数优化)同时为单一模型训练出多个版本,这能极大加快模型的开发周期。
  • 数据科学家们往往拥有自己的首选模型开发方法。Jupyter Notebook、Zeppelin或者R等笔记型IDE可在用户的本地浏览器中提供IDE开发环境,其中的实际命令则由AWS云内的远程资源负责执行。
  • 尽量避免在云端与数据科学家的本地工作站之间频繁移动数据集。目前的首选模式之一,是将所有数据保存在Amazon S3当中,同时保留ETL管道以根据开发需求加载数据。
  • 使用API Gateway、Amazon SageMaker或者ECS部署您的模型,即可将传入流量路由至机器学习西芹 不同版本,保证在全体流量指向新版本之前验证模型的生产性能。