本文来自作者
Garvin
在 GitChat 上精彩分享。
前言
首先非常高兴可以和各位 gitchat 的同学做一次分享,这次分享希望给大家介绍一些关于机器学习云服务相关的理念,也欢迎大家来阿里云机器学习PAI上面做客,为我们的下一步产品建设提供更多的输入。产品地址:https://data.aliyun.com/product/learn
机器学习平台PAI特点
阿里云机器学习PAI(Platform of Artificial Intelligence)是一款一站式的机器学习平台,包含数据预处理、特征工程、常规机器学习算法、深度学习框架、模型的评估以及预测这一整套机器学习相关服务。
得益于底层的飞天计算平台的 CPU 集群以及 GPU 集群,PAI 可以为用户提供 PB 级别数据的高效计算保证。
另外,PAI 还将算法组件进行封装,并且增添了大量的可视化工具,让用户可以低门槛上手,真正实现人工智能触手可及。
目前无论是国内还是国际上,有许多互联网公司都推出了类似 PAI 这样的 PAAS 层机器学习服务,PAI目前在国内的竞争中处于领先集团。
· PAI特点1
目前机器学习 PAI 平台已经涵盖了100余种算法组件,包含聚类、分类、回归、文本分析、关系网络等种类的算法。
· PAI特点2
PAI平台底层支持 CPU 以及 GPU 的集群,在 GPU 集群之上支持了业内主流的三款深度学习框架 TensorFlow、Caffe、MXNet。
· PAI特点3
提供拖拉拽的组件操作方式,让搭建机器学习实验像搭建积木一样简单。
· PAI特点4
提供一站式的机器学习企业级服务覆盖机器学习的的整个流程,包含数据的预处理、特征工程、机器学习算法、深度学习框架、评估和预测。
机器学习云平台与自建基于开源的机器学习框架的区别
其实如果要搭建一套企业级机器学习服务架构,大体的架构是一致的,作为参考,首先我们来看下PAI的架构。
从下向上看:
-
首先在底层需要有计算基础设施,无论是 CPU、GPU 或是 FPGA,需要有调度系统来统一调度底层的计算资源。
-
向上需要有支持分布式计算架构的框架,常见的有 ParameterServer 或者 Mapreduce、Tensorflow 等,这一层的作用是将算法计算任务通过分布式框架分发到底层的基础设施。
-
再向上一层就是各种算法以及数据预处理或者统计相关的工具,常见的lr、svm等算法都在这一层实现。
-
最上一层就是基于算法搭建的各种业务场景下的服务。另外,看架构图右边,一个成熟的机器学习服务,还需要支持模型的离线和在线预测,用以支持各种类型的业务需求。
云服务与开源的框架的区别表现在那几个方面呢?
-
首先是如何保证机器学习链路的连贯性,机器学习云平台的底层框架可以看作为黑盒,里面做了大量的数据以及模型应用的优化。
比如为了方便算法平台生成的模型部署为在线服务,云服务平台可以自定义模型的表现形式。
而开源框架想要实现整套的机器学习链路,可能需要采用多种开源服务,这些服务之间的关联可能会有性能奉献。
但是基于开源架构自建,因为所有的底层服务都是自己实现,所以在功能延展性方面会有优势。
-
在成本方面,需要考虑云服务价格以及自建集群运维的成本。自建集群的成本主要体现在集群硬件配置,扩容成本以及整个服务体系的软硬件开发人员成本。
我认为自建服务最大的挑战可能是无法动态的伸缩计算资源来满足业务需求,举个例子,如果一家公司日均作业计算量需要50个节点。
但是如果这家公司搞一个活动,可能突然需要80个节点的资源,那么就要考虑为了一次活动而对集群扩容是否划算。然而云服务通常是动态扩容的,就不会出现这样的顾虑。
-
服务稳定性方面,自建环境如何达到云端服务的高可用性也是非常有挑战的,从计算集群的任务分配、周期性计算任务调度稳定性、以及在线服务的QPS这些方面都非常考验自建环境的性能。
如何在机器学习云服务上搭建业务
在本文为大家介绍如何通过机器学习云服务搭建一套云端的心脏病监控系统。首先,通过PAI生成心脏病预测模型,然后将模型部署为在线预测API,通过调用API实时的对用户的健康状况进行诊断。
下面看下整个具体流程:
数据集介绍
数据源: UCI开源数据集heart_disease(
http://archive.ics.uci.edu/ml/datasets/Heart+Disease
)
针对美国某区域的心脏病检查患者的体测数据,共303条数据。具体字段如下表:
数据探索流程
数据挖掘流程如下:
整体实验流程:
数据预处理
数据预处理也叫作数据清洗,主要在数据进入算法流程前对数据进行去噪、填充缺失值、类型变换等操作。本次实验的输入数据包括14个特征和1个目标队列。
需要解决的场景是根据用户的体检指标预测是否会患有心脏病,每个样本只有患病或不患病两种,是分类问题。因为本次分类实验选用的是线性模型逻辑回归,要求输入的特征都是double型的数据。
输入数据展示:
我们看到有很多数据是文字描述的,在数据预处理的过程中我们需要根据每个字段的含义将字符型转为数值。
二值类的数据
二值类的比较容易转换,如sex字段有两种表现形式female和male,我们可以将female表示成0,把male表示成1。
多值类的数据
比如cp字段,表示胸部的疼痛感,我们可以通过疼痛的由轻到重映射成0~3的数值。
数据的预处理通过sql脚本来实现,具体请参考SQL脚本-1组件,
特征工程
特征工程主要是包括特征的衍生、尺度变化等。本例中有两个组件负责特征工程的部分。
过滤式特征选择
主要是通过这个组件判断每个特征对于结果的影响,通过信息熵和基尼系数来表示,可以通过查看评估报告来显示最终的结果。
归一化
因为本次实验选择的是通过逻辑回归二分类来进行模型训练,需要每个特征去除量纲的影响。
归一化的作用是将每个特征的数值范围变为0到1之间。归一化的公式为result=(val-min)/(max-min)。
归一化结果:
模型训练和预测
本次实验是监督学习,因为我们已经知道每个样本是否患有心脏病,所谓监督学习就是已知结果来训练模型。解决的问题是预测一组用户是否患有心脏病。
拆分
首先通过拆分组件将数据分为两部分,本次实验按照训练集和预测集7:3的比例拆分。训练集数据流入逻辑回归二分类组件用来训练模型,预测集数据进入预测组件。
逻辑回归二分类
逻辑回归是一个线性模型,在这里通过计算结果的阈值实现分类。具体的算法详情推荐大家在网上或者书籍中自行了解。逻辑回归训练好的模型可以在模型页签中查看。
预测
预测组件的两个输入分别是模型和预测集。预测结果展示的是预测数据、真实数据、每组数据不同结果的概率。
评估
通过混淆矩阵组件可以评估模型的准确率等参数
,
通过此组件可以方便的通过预测的准确性来评估模型。
通过以上数据探索的流程我们可以得到以下的结论。
特征权重
我们可以通过过滤式特征选择得到每个特征对于结果的权重。
模型效果
通过上文提供的14个特征,可以达到百分之八十多的心脏病预测准确率。模型可以用来做预测,辅助医生预防和治疗心脏病。
模型部署为在线预测API
选择部署模型
我们以心脏病预测案例为例,实验生成一个逻辑回归模型,是用在线预测可以在当前实验点击“部署”按钮,选择“在线预测部署”。
配置模型部署信息
进入模型配置页:
选择对应的项目空间,如果是第一次使用需要开通在线预测权限,权限申请是实时开通。下面详细解释 instance 的定义:
-
每个项目默认包含30个 instance,可提工单扩容。删除已部署模型会释放当前模型的 instance。
-
instance 决定模型的 QPS,每个 instance 为1核2G内存。
-
单个模型的 instance 部署限制是[1,15]。
模型管控
模型部署完成可以进入如下界面进行管理,新部署模型可以在“查看模型详情”进行查看。
已经部署的模型可以在“已部署在线模型”里进行管理,
模型管理界面,版本表示的是同一模型多次部署的区分,通过下图红框可以拿到模型所在的项目和模型名称:
模型调试
模型调试页面可以帮助用户了解在线预测请求参数的书写规范,进入模型调试页面。
请求地址:https://dtplus-cn-shanghai.data.aliyuncs.com/dataplus_261422/pai/prediction/projects/