܄

基于大数据的机器学习:Apache SystemML 在 IBM BigInsights 的实践

【数据猿导读】 由于数字数据的广泛增长和大数据的计算能力提高,机器学习的时代已经到来。 Apache SystemML 是由 IBM 开源的机器学习系统,现在是 Apache 顶级项目,它所具备的能力在机器学习领域独领风骚。

基于大数据的机器学习:Apache SystemML 在 IBM BigInsights 的实践

机器学习 (Machine Learning, ML) 是计算机可以学习而不需要事先编程的能力。 由于数字数据的广泛增长和大数据的计算能力提高,机器学习的时代已经到来。 Apache SystemML 是由 IBM 开源的机器学习系统,现在是 Apache 顶级项目,它所具备的能力在机器学习领域独领风骚。 IBM BigInsights 是业界领先的 Hadoop 企业级发行版本,在 IBM BigInsights 发行版中已经包含了 Apache SystemML 用于大数据平台的机器学习。 本文阐述了 Apache SystemML 的原理和基于 IBM BigInsights 的机器学习实践。

机器学习和 Apache SystemML

机器学习是让计算机从数据中学习的科学和艺术。换句话说,可以训练计算机来了解数据科学家创建的模型。该计算机将使用算法从其接收的数据中迭代学习,并发现该数据中的模式。当新数据进入时,计算机可以根据以前学习的模式进行预测。例如,像亚马逊和 Netflix 这样的公司利用机器学习算法来分析客户的历史产品购买数据或他们观看过的电影。亚马逊然后可以向您推荐新产品,Netfix 可以推荐您可能感兴趣的电影。另外一个例子,通过收集社交媒体情绪数据,零售商可以更多地了解客户的购买习惯,从而提供更令人满意的购物体验。还比如,随着搜索引擎收集越来越多的搜索和选择数据,引擎可以提取与其用户相关的更准确的信息,然后提供更相关的搜索结果,其原理是通过大量分析数据可以让您看到通常可能看不到的内容,从而更好地为客户服务。

ML 是机器学习 Machine Learning 的缩写,所以 SystemML 显而易见是机器学习系统,由 IBM 的 Almaden 实验室 10 年前开发。它用 Java 语言编写,可支持描述性分析、分类、聚类、回归、矩阵分解及生存分析等机器学习算法。IBM 人工智能 Waston 平台就整合了 SystemML 的功能,例如 SystemML 用于 Watson 医疗用于预测治疗结果的机器学习算法,精确度大幅度提高。

SystemML 在 2015 年由 IBM 开源,于 2015 年 8 月 27 日在 GitHub 上公开发布,并于 2015 年 11 月 2 日成为 Apache Incubator 孵化项目。Apache SystemML 作为开源大数据机学习平台受到广泛认可,在 Cadent Technology 和 IBM Watson Health 等客户实践中备受赞誉。Apache Software Foundation 在 2017 年 5 月 31 日宣布将 Apache SystemML 孵化毕业,自此成为 Apache 顶级项目。目前 SystemML 作为 Apache 顶级项目的最新版本是 0.14,支持 Spark 2.x。Apache SystemML 在 2016 年被 datamation.com 列为 15 款开源人工智能软件之一。在部署方面, SystemML 运行环境支持单机和分布式部署。单机部署显然有利于本地开发的工作,而分布式部署则可以真正发挥机器学习的威力,支持的框架包括 Hadoop 和 Spark。

Apache SystemML 目前支持的机器学习算法有:

描述性统计 Descriptive Statistics该类中的算法用于描述数据集的主要特征。它们提供了对不同观察或数据记录计算的有意义的摘要收集在研究中。这些摘要通常构成初步数据探索的基础,作为其中的一部分更广泛的统计分析。

单变量统计 Univariate Statistics

双变量统计 Bivariate Statistics

分层双变量统计 Stratified Bivariate Statistics

分类 Classification该类中的算法用于基于一些预定义的类或对象对数据进行分组。这是监督学习的特点。分类算法的一个例子是将社交媒体的评论分为正面评价,负面评价或中立评价。

多项 Logistic 回归 Multinomial Logistic Regression

支持向量机 Support Vector Machines

二进制类支持向量机 Binary-Class Support Vector Machines

多类支持向量机 Multi-Class Support Vector Machines

朴素贝叶斯 Naive Bayes

决策树 Decision Trees

随机森林 Random Forests

聚类 Clustering聚类是一种无监督的学习类算法。数据集中没有预定义的类 – 算法在数据中找到关系。聚类算法将数据排列或聚类成若干数量的逻辑组。例如,确定商店客户的购买模式。

K 均值聚类 K-Means Clustering

回归 Regression回归是另一类监督学习算法。该数据集中的目标变量是连续的。股票市场预测是回归算法的一个例子。这里的股票价格是目标变量,或者是我们想预测的,而且每天都有变化。

线性回归 Linear Regression

逐步线性回归 Stepwise Linear Regression

广义线性模型 Generalized Linear Models

逐步广义线性回归 Stepwise Generalized Linear Regression

回归计分与预测 Regression Scoring and Prediction

矩阵分解 Matrix Factorization矩阵分解算法用于发现嵌入在不同实体之间的交互中的潜在特征。它们利用多个矩阵,当它们相乘时,生成一个类似于原先矩阵的新矩阵。亚马逊和 Netflix 使用矩阵因式分解算法来提出产品建议。例如每行代表您的一个客户,每列表示您的一个产品,矩阵是大而稀疏的。因此,每个单元代表由特定客户购买的特定产品。该矩阵首先填充历史数据,然后将原始矩阵分解为”产品因素”和”客户因素”两个因素。通过将这两个因子相乘在一起,我们产生添加到矩阵中的新的非零值。这些新的非零值表示产品建议。

主成分分析 Principal Component Analysis

通过交替最小化完成矩阵 Matrix Completion via Alternating Minimizations

生存分析 Survival Analysis生存分析检查感兴趣的特定事件发生所需的时间。换句话说,它们用于估计生存概率。 例如,在医学研究中,原型的这种事件是患者的死亡,但是该方法可以应用于其他应用领域,例如在心理实验中完成个人的任务或者在工程中的电气部件的故障。

Kaplan-Meier 生存分析 Kaplan-Meier Survival Analysis

Cox 比例风险回归模型 Cox Proportional Hazard Regression Model

Apache SystemML 特点和架构

Apache SystemML 具备两种非常的能力在机器学 习领 域独 领风骚 。声明式机器学 习 ( Declarative Machine Learning 简称 DML ) 使表达 ML 算法更容易和更自然。 算法可以用 类 似 R 的 语 法或 类 Python 语法来表示。 DML 通 过 提供表达自定 义 分析的完全灵活性以及与底 层输 入格式和物理数据表示形式的数据独立性, 显 着提高了数据科学家的生 产 力。其次, Apache SystemML 根据数据和集群特性提供自 动优 化,以确保效率和可 扩 展性。 Apache SystemML 为使用大数据的机器学习提供了最佳性能。它可以在 MapReduce 或 Spark 环境中运行,它可以自动优化并实现性能扩展,自动确定算法是在单机还是在集群上运行。

当对小数据量进行机器学习时,数据科学家可以利用 R 或 Python 编写专为数据解读而设计的高级代码。该代码可以在单机上上运行,返回给数据科学家的结果可能不是预期的,而是一个迭代的结果,然后开始修改代码和重新评估结果的过程,这一直持续到科学家认为结果是可以接受的,这种方法适用于小数据量。对于大数据的情况,则需要采用 Hadoop 或者 Spark 计算机集群,在这种情况下,数据科学家像以前一样写高级代码,但必须依靠程序员将代码重新实现或转换为分布式平台的代码,这经常需要消耗大量的时间和精力。进行第一次迭代的结果被传回给数据科学家,与小数据一样,结果不太可能是数据科学家预期,并且需要对算法进行一些调整。取决于算法的复杂性和要分析的数据量,迭代可能需要几天甚至几周才能运行,每个代码重写和重新转换都容易产生错误。

如图 1 所示,SystemML 的作用是翻译数据科学家的代码为可扩展的可执行程序,这有利于大大减少每次迭代的运行时间,同时 SystemML 将性能和可扩展性结合在一起,代码量远远小于其他方式。

大数据_机器学习_Apache_SystemML_实践-1

图 1. Apache SystemML 是基于大数据的解决方案

为了说明 Apache SystemML 的性能,比较了三种不同的稀疏集合:小数据量,中等数据规模和大量数据。小数据量包含 1.2 GB 数据,中等数据量包含 12 GB 数据,大量数据 120 GB 数据,在 6 节点计算机集群上分别用 R、Spark MLlib 和 SystemML 运行同样的算法。首先,R 代码需要超过一天多的时间才能最终达成小数据量的计算, 由于内存 不足错误,R 从未完成在中型和大型数据集上的运行,显而易见 R 不是为大数据分析设计的。Spark MLlib 在小数据和中等数据情况表现很好, 可以却花 费 了超过一天的 时间 来运行大数据集。 Apache SystemML 超越了其他方案,在各种数据量下均能快速完成分析任务, 如图 2 所示。

大数据_机器学习_Apache_SystemML_实践-2

图 2. Apache SystemML 的性能

Apache SystemML 能实现大数据的机器学习的能力和高性能源于 SystemML 优化器,用来自动执行关键的性能决策,分布式还是本地计算  如何进行数据分片  是否需要磁盘和内存交互  Apache SystemML 支持分布式和本地的混合运算,SystemML 优化器可以支持 Spark Driver 中的多线程计算,Spark Executors 中的分布式计算以及优化器进行基于成本的选择。如图 3 所示,优化器的输入是算法,输出则是生成的分布式计算代码。优化器分为三个部分,语言层、高层次操作层(HOP)、低层次操作层(LOP)。

语言层完成了三种不同的操作:解析,变量分析和验证,输入代码被分成基本块,然后在适用的地方进行优化。

高层次操作层(HOP)创建表示块的数据流图,根据数据统计信息确定作业分配。优化器从基于内存和成本估算的替代执行计划中选择,并确定操作符的顺序和选择,选择分布式、本地或混合运算方式。SystemML 有一个广泛的重写库,这些重写用于优化代码。

低层次操作层(LOP)生成物理执行计划,进一步优化 Spark、Map-Reduce 的作业。

大数据_机器学习_Apache_SystemML_实践-3

图 3. Apache SystemML 的架构和优化

Apache SystemML 执行模式

Apache SystemML 提供了多种执行模式,数据科学家可以在单机上开发一个算法,然后进行扩展,使用 Spark 或 Hadoop 将该算法用于分发群集。Apache SystemML 的执行模式分为以下五种,鉴于 SystemML 的主要目的是在大型分布式数据集上执行机器学习,调用 SystemML 的两个最重要的方法是 Hadoop Batch 和 Spark Batch 模式。

Spark MLContext

Spark MLContext API 提供了一个编程接口,用于使用 Scala,Java 和 Python 等语言从 Spark 与 SystemML 进行交互。 因此,它提供了一种方便的方式来与 Spark Shell 和 Notebook (如 Jupyter 和 Zeppelin)进行交互。

Spark Batch

Spark Batch 模式可以使用 spark-submit SystemML.jar 在批处理模式下调用 SystemML,调用的 DML 脚本在 -f 参数后面指定。

Hadoop Batch

Hadoop Batch 模式可以使用 hadoop jar SystemML.jar 在批处理模式下调用 SystemML,调用的 DML 脚本在 -f 参数后面指定。

Standalone

SystemML 的独立模式旨在允许数据科学家在单个机器上快速原型算法。 在独立模式下,所有操作均发生在非 Hadoop 环境中的单个节点上。 独立模式不适用于大型数据集。对于大规模生产环境,SystemML 算法执行可以使用 Apache Hadoop 或 Apache Spark 分布在多节点集群中。

JMLC

Java 机器学习连接器(Java Machine Learning Connector 简称 JMLC) API 是用于以嵌入式方式与 SystemML 交互的编程接口。为了使用 JMLC,由于 JMLC 在现有的 Java 虚拟机中调用了 SystemML,所以需要在 Java 应用程序的类路径中包含 SystemML jar 文件。这种可嵌入性使得 SystemML 成为生产流程的一部分,用于诸如评分等任务。JMLC 的主要目的是作为一个评分 API,您的评分功能使用 SystemML 的 DML (声明式机器学习)语言表达。在相当少量的输入数据上,单个 JVM 上的单个计算机上产生相对较小量的输出数据。

由于启动成本,往往是最佳做法做批量打分,例如一次记录 1000 条记录。对于大量数据,建议以 SystemML 的分布式模式(如 Spark 批处理模式或 Hadoop 批处理模式)运行 DML,以利用 SystemML 的分布式计算功能。 JMLC 以性能为代价提供可嵌入性,因此其使用取决于正在处理的业务用例的性质。

Apache SystemML 安装和部署

IBM Biginsights 是业界领先的 Hadoop 企业级发行版本,在世界著名 IT 行业独立研究公司 Forrester 从 2012 年到 2016 年发布的三次 Hadoop 解决方案的评测报告中,IBM BigInsights 一直处于领导者位置。IBM BigInsights 以 Apache Hadoop 及其相关开源项目作为核心组件,并在 Hadoop 开源框架的基础上进行了大量的企业化增强。IBM Biginsights 包含 Apache SystemML 最新的版本,可以直接部署。通常 Apache SystemML 会和 Spark 一起使用,systemml 必须和 spark 节点安装在一起,并且需要在多节点部署。


来源:36大数据

声明:数据猿尊重媒体行业规范,相关内容都会注明来源与作者;转载我们原创内容时,也请务必注明“来源:数据猿”与作者名称,否则将会受到数据猿追责。

刷新相关文章

#榜样的力量#疾控AI分析平台WDCIP——以科技力量贡献“大数据”智慧丨数据猿新冠战“疫”公益策划
#榜样的力量#疾控AI分析平台WDCIP——以科技力量贡献“大数...
基于深度迁移学习的多语种NLP技术原理和实践
基于深度迁移学习的多语种NLP技术原理和实践
张涵诚:大数据招商平台可推动地方供给侧改革
张涵诚:大数据招商平台可推动地方供给侧改革

我要评论

精品栏目

[2017/12/19]

大数据24小时

More>

[2017/12/18-22]

大数据周周看

More>

[2017/12/18-22]

大数据投融资

More>

[2017/12/18-22]

大咖周语录

More>

[2017/12/13-20]

大数据周聘汇

More>

[2017/12/12-19]

每周一本书

More>

返回顶部