为智能分布式机器学习系统设计高层架构,该系统以Spark作为其核心计算引擎。
现代的大数据场景包含如下需求:
1) 必须与系统的其他组件整合,尤其是数据的收集和存储系统、分析和报告以及前端应用。
2) 易于扩展且与其他组件相对独立。同时具备良好的水平和垂直可扩展性。
3) 高效计算,支持机器学习和迭代式分析应用。
4) 同时支持批处理和实时处理。
Spark作为一个框架本身能满足上述需求,还需要确保基于它设计的机器学习系统也满足上述需求,保证算法的设计不存在能引发系统故障的瓶颈。
1. 为什么要使用机器学习?
1) 数据规模大。完全依靠人工处理跟不上发展;
2) 机器学习和统计模型等基于模型的方式能发现人类难以发现的模式(因为数据量级和复杂度过高);
3) 基于模型的方式能避免个人或是情感上的偏见;
4) 让机器学习负担耗时且机器擅长的任务,并像内容团队提供工具以帮助他们更好地理解用户和内容。
5) 许多系统采用人力机制为数据生成标识,并用于训练模型。之后将模型部署到在线系统中用于大规模环境下的预测。
2. 机器学习系统可以用来干什么?
1) 个性化。
根据用户行为或外部因素改变用户体验和呈现给用户内容。推荐指显示呈现产品或内容,个性化有时偏向隐式,可能根据用户数据改变搜索结果。
2) 目标营销和客户细分
使用聚类或其他模型对客户细分,细分有助于理解各组客户的共性,同组用户的相似性和不同组的差异,有助于理解用户行为背后的动机,有助于制定针对用户群的更为广泛的营销策略。
3) 预测建模与分析
创建回归模型预测新的发展趋势,使用分类模型为对象分配标签或分类。
3. 数据驱动的机器学习系统的组成
1) 数据获取与存储
数据通常来自用户活动,其他系统(机器生成数据,如IP)和外部数据源。
数据存储可能涉及多种系统。
- 文件系统:HDFS、Amazon S3
- SQL数据库: MySQL或PostgreSQL
- 分布式NoSQL数据存储:HBase、Cassandra、DynamoDB
- 搜索引擎:Solr、Elasticsearch
- 流数据系统:Kafka、Flume、AmazonKinesis
2) 数据清理与转换
- 数据过滤
取出满足特定条件的数据
- 处理数据缺失、不完整或有缺陷
过滤或填充
- 处理错误和异常值
- 合并多个数据源
- 数据汇总
3) 模型训练与测试回路
模型训练、评估、交叉验证
4) 模型部署与整合
将已训练的模型导入特定的数据存储中。也是生产系统获取新版本的地方。通过这种方式,实时服务系统能在训练新模型时进行周期性的更新。
5) 模型监控与反馈
应该监控模型准确度相关指标和业务指标。可以尽可能在生产系统中部署不同的模型,通过调整他们优化业务指标。可以投通过在线分割测试进行,但其代价高昂。
模型的应用影响用户的决策和潜在行为,反过来又从根本上改变模型将来的训练数据。可以用未使用模型的用户数据,即无偏见训练数据降低反馈回路的负面影响。
6) 批处理或实时方案的选择
批处理方法难以在新数据到达时立即完成模型的更新。
实时系统能够对新的信息和底层行为做出快速地反应和调整。对线性模型使用梯度下降法进行在线优化可以实现立即更新模型,实现实时系统。
在线学习模型对数据的获取和转换都难以做到实时。在线训练和模型选择以及部署阶段的延时可能难以达到实时性的需求。批处理框架不适合对本质为流的数据进行实时处理。
Spark的实时流处理组件Spark Stream有助于实时机器学习任务。
现实中的大部分系统以近实时性为设计目标。新的数据被收集为小批量的训练数据,再输入给在线学习算法。通过周期性地进行批处理保证实时模型的表现不会随时间偏移而变差。
模型训练包括训练-测试和模型选择环节。