如何架构机器学习平台

愈来愈多企业开始尝试使用机器学习算法来预测业务,并逐渐在线上部署。但机器学习和深度学习的技术栈繁渣。有多种编程语言,运行环境。稳定性,可用性,维护方式不一样以往的IT服务。技术负责人须要设计良好的架构,发掘业务潜力也要保障生产系统稳定性。本文主要介绍:html

 

1.理解机器学习算法训练流程。前端

2.提供线上模型部署架构方案java

3.掌握模型治理和运维的方案。python

 

 

1.机器学习应用的领域:

 

电商: 推荐系统c++

金融:反欺诈,打分卡,信用评分算法

安全:攻击检测数据库

 

 

2.什么是模型:

你们都知道机器学习训练是为了获得模型。那什么是模型呢?编程

假设以下算法用于预测房价。后端

 

Y=w1*x1+w2*x2+wn*xn +bapi

所谓模型训练就是找到预测最准的[w1,w2,wn,b]参数。   训练结束后,将[w1,w2,wn,b] .存储到文件中,能够称为模型。模型就等于训练获得的参数

 部署到生产时候,使用保存的[w1,w2,wn,b]  初始化 Y=w1*x1+w2*x2+wn*xn+b。这个模型就能够用来预测房价

 整个过程相似序列化,反序列化过程。

 

 

 

3.机器学习工具集:

Scikit learn (python)

Tensorflow  (python,c++)

spark mlib (java)

Mahout (java)

Dl4j

R

 

各类工具都不能互相替代。生成的模型文件格式不一样,编程语言不一样。

甚至是一样参数用不一样工具预测结果会相差很大。

 

 

4.模型表达通用标准:

 

PMML 是一种事实标准语言,用于呈现数据挖掘模型。预测分析模型 和数据挖掘模型 是指代数学模型的术语,这些模型采用统计技术了解大量历史数据中隐藏的模式。预测分析模型采用定型过程当中获取的知识来预测新数据中是否有已知模式。PMML 容许您在不一样的应用程序之间轻松共享预测分析模型。所以,您能够在一个系统中定型一个模型,在 PMML 中对其进行表达,而后将其移动到另外一个系统中,并在该系统中使用上述模型预测机器失效的可能性等

 

相关说明能够查看:

http://dmg.org/pmml/v4-1/GeneralStructure.html

https://www.ibm.com/developerworks/cn/opensource/ind-PMML1/

 

有几点须要注意:

PMML支持部分模型。

各类工具都有生成PMML功能。

能够经过开源Openscoring 来部署PMML模型。Drools 也只支持PMML.

 

5.模型评测标准:

 

主要是准确率和召回率,AUC.  好比复杂场景,须要本身设计标准。网上资料比较多这里就不详细说明

 

6.模型训练过程(离线学习)

 

数据处理->特征处理-模型训练-模型选择->生产部署

 

7.模型部署方案:

 

能够考虑直接dump.而后在生产环境load运行。可使amazon s3作模型管理,md5作个hash用来管理版本管理。

 

比较标准作法是使用PMML.特别对外交付的场景。

 

PMM是一种标准化的模型表示方式。托管平台openscoreing .,

 

 架构模式A:

 

 

这种模式优势:

  1. 能够减小数据交互。好比推荐系统,输入是个user id ,返回推荐列表。
  2. 外部数据补充。好比征信场景,输入是一个手机号。征信服务提供商就要在数据库中收集这个手机相关信息。再对收集到的数据进行预测。

实现方式有主要两种,数据收集能够在前端完成或者后端,能够考虑实现难度和解耦承担来权衡。

模式B:

 

 

所需数据所有由外部传入。基础服务通常使用这种架构。好比天然语言,图片处理,语音识别。

 

在线学习:

 

只有生成模型才能够在线学习。不是本文重点就不展开说明了。

 

8.模型治理:

 

8.1 模型质量监控:

 

须要设定一些业务指标,经过阈值,历史数据环比来进行监控和预警。

及时指标:响应时间,经过率,点击率,转化率

长期指标:反馈周期很长的指标。好比违约率,都须要2个月之后才能判断是否违约。因此数据库须要保留,贷款客户和模型版本的关系。

 

8.2 响应时间:

 

根据模型算法不一样,处理时间10ms到10分钟不等。

建议采用异步服务架构模式,通常能够考虑api-消息队列来处理。预测解决经过通知接口或者轮询获取

 

8.3 模型版本控制:

PMML有相应的版本说明。若是用原始模型文件须要本身添加一些机制,来处理。好比计算模型文件hash值。

 

8.4 降级方案:

若是模型一旦出现问题,很难debug. 并且修复时候会很长。只考虑回滚或下线。须要和业务方明确这一点并提早作好预案。

 

 ----------

http://www.cnblogs.com/codemind/

相关文章
相关标签/搜索