写点什么

Spark 大数据处理系列之 Machine Learning

  • 2016-06-06
  • 本文字数:3262 字

    阅读完需:约 11 分钟

写在之前:

本文是《Spark 大数据处理》系列的第四篇,其他三篇: Spark 介绍 Saprk SQL Spark Streaming

最近几年,机器学习、预测分析和数据科学主题得到了广泛的关注。Spark 的机器学习库(Spark MLlib),包括各种机器学习算法:协同过滤算法、聚类算法、分类算法和其他算法。

在前面的《Spark 大数据处理》系列文章,介绍 Apache Spark 框架,介绍如何使用 Spark SQL 库的 SQL 接口去访问数据,使用 Spark Streaming 进行实时流式数据处理和分析。

在本篇文章,作者将讨论机器学习概念以及如何使用 Spark MLlib 来进行预测分析。后面将会使用一个例子展示 Spark MLlib 在机器学习领域的强悍。

Spark 机器学习 API 包含两个 package:spark.mllib 和 spark.ml。
spark.mllib 包含基于弹性数据集(RDD)的原始 Spark 机器学习 API。它提供的机器学习技术有:相关性、分类和回归、协同过滤、聚类和数据降维。

spark.ml 提供建立在 DataFrame 的机器学习 API,DataFrame 是 Spark SQL 的核心部分。这个包提供开发和管理机器学习管道的功能,可以用来进行特征提取、转换、选择器和机器学习算法,比如分类和回归和聚类。

本篇文章聚焦在 Spark MLlib 上,并讨论各个机器学习算法。下篇文章将讲述 Spark ML 以及如何创建和管理数据管道。

机器学习和数据科学

机器学习是从已经存在的数据进行学习来对将来进行数据预测,它是基于输入数据集创建模型做数据驱动决策。

数据科学是从海里数据集(结构化和非结构化数据)中抽取知识,为商业团队提供数据洞察以及影响商业决策和路线图。数据科学家的地位比以前用传统数值方法解决问题的人要重要。

以下是几类机器学习模型:

  • 监督学习模型
  • 非监督学习模型
  • 半监督学习模型
  • 增强学习模型

下面简单的了解下各机器学习模型,并进行比较:

  • 监督学习模型:监督学习模型对已标记的训练数据集训练出结果,然后对未标记的数据集进行预测;
    监督学习又包含两个子模型:回归模型和分类模型。
  • 非监督学习模型:非监督学习模型是用来从原始数据(无训练数据)中找到隐藏的模式或者关系,因而非监督学习模型是基于未标记数据集的;
  • 半监督学习模型:半监督学习模型用在监督和非监督机器学习中做预测分析,其既有标记数据又有未标记数据。典型的场景是混合少量标记数据和大量未标记数据。半监督学习一般使用分类和回归的机器学习方法;
  • 增强学习模型:增强学习模型通过不同的行为来寻找目标回报函数最大化。

下面给各个机器学习模型举个列子:

  • 监督学习:异常监测;
  • 非监督学习:社交网络,语言预测;
  • 半监督学习:图像分类、语音识别;
  • 增强学习:人工智能(AI)。

机器学习项目步骤

开发机器学习项目时,数据预处理、清洗和分析的工作是非常重要的,与解决业务问题的实际的学习模型和算法一样重要。
典型的机器学习解决方案的一般步骤:

  • 特征工程
  • 模型训练
  • 模型评估

图 1

原始数据如果不能清洗或者预处理,则会造成最终的结果不准确或者不可用,甚至丢失重要的细节。

训练数据的质量对最终的预测结果非常重要,如果训练数据不够随机,得出的结果模型不精确;如果数据量太小,机器学习出的模型也不准确。

使用案例:
业务使用案例分布于各个领域,包括个性化推荐引擎(食品推荐引擎),数据预测分析(股价预测或者预测航班延迟),广告,异常监测,图像和视频模型识别,以及其他各类人工智能。
接着来看两个比较流行的机器学习应用:个性化推荐引擎和异常监测。

推荐引擎

个性化推荐引擎使用商品属性和用户行为来进行预测。推荐引擎一般有两种算法实现:基于内容过滤和协同过滤。
协调过滤的解决方案比其他算法要好,Spark MLlib 实现了 ALS 协同过滤算法。Spark MLlib 的协同过滤有两种形式:显式反馈和隐试反馈。显式反馈是基于用户购买的商品(比如,电影),显式反馈虽好,但很多情况下会出现数据倾斜;隐试反馈是基于用户的行为数据,比如,浏览、点击、喜欢等行为。隐试反馈现在大规模应用在工业上进行数据预测分析,因为其很容易收集各类数据。
另外有基于模型的方法实现推荐引擎,这里暂且略过。

异常监测

异常监测是机器学习中另外一个应用非常广泛的技术,因为其可以快速和准确地解决金融行业的棘手问题。金融服务业需要在几百毫秒内判断出一笔在线交易是否非法。
神经网络技术被用来进行销售点的异常监测。比如像 PayPal 等公司使用不同的机器学习算法(比如,线性回归,神经网络和深度学习)来进行风险管理。

Spark MLlib 库提供给了几个实现的算法,比如,线性 SVM、逻辑回归、决策树和贝叶斯算法。另外,一些集成模型,比如随机森林和 gradient-boosting 树。
那么现在开始我们的使用 Apache Spark 框架进行机器学习之旅。

Spark MLlib

Spark MLlib 实现的机器学习库使得机器学习模型可扩展和易使用,包括分类算法、回归算法、聚类算法、协同过滤算法、降维算法,并提供了相应的 API。除了这些算法外,Spark MLlib 还提供了各种数据处理功能和数据分析工具为大家使用:

  • 通过 FP-growth 算法进行频繁项集挖掘和关联分析;
  • 通过 PrefixSpan 算法进行序列模式挖掘;
  • 提供概括性统计和假设检验;
  • 提供特征转换;
  • 机器学习模型评估和超参数调优。

图 2 展示 Spark 生态
Spark MLlib API 支持 Scala,Java 和 Python 编程。

Spark MLlib 应用实践

使用 Spark MLlib 实现推荐引擎。推荐引擎最佳实践是基于已知用户的商品行为而去预测用户可能感兴趣的未知商品。推荐引擎基于已知数据(也即,训练数据)训练出预测模型。然后利用训练好的预测模型来预测。
最佳电影推荐引擎的实现有下面几步:

  • 加载电影数据;
  • 加载你指定的评价数据;
  • 加载社区提供的评价数据;
  • 将评价数据 join 成单个 RDD;
  • 使用 ALS 算法训练模型;
  • 确认指定用户(userId = 1)未评价的电影;
  • 预测未被用户评价的电影的评价;
  • 获取 Top N 的推荐(这里 N= 5);
  • 在终端显示推荐结果。

如果你想对输出的数据做进一步分析,你可以把预测的结果存储到 Cassandra 或者 MongoDB 等数据库。

使用到的技术

这里采用 Java 开发 Spark MLlib 程序,并在 stand-alone 模型下执行。使用到的 MLlib Java 类:org.apache.spark.mllib.recommendation。

  • ALS
  • MatrixFactorizationModel
  • Rating

图 3 Spark 机器学习的例子程序架构

程序执行:
开发好的程序进行打包,设置环境变量:JDK (JAVA_HOME), Maven (MAVEN_HOME) 和 Spark (SPARK_HOME)。
在 Windows 环境中:

复制代码
set JAVA_HOME=[JDK_INSTALL_DIRECTORY]
set PATH=%PATH%;%JAVA_HOME%\bin
set MAVEN_HOME=[MAVEN_INSTALL_DIRECTORY]
set PATH=%PATH%;%MAVEN_HOME%\bin
set SPARK_HOME=[SPARK_INSTALL_DIRECTORY]
set PATH=%PATH%;%SPARK_HOME%\bin
cd c:\dev\projects\spark-mllib-sample-app
mvn clean install
mvn eclipse:clean eclipse:eclipse

在 Linux 或者 MAC 系统中;

复制代码
export JAVA_HOME=[JDK_INSTALL_DIRECTORY]
export PATH=$PATH:$JAVA_HOME/bin
export MAVEN_HOME=[MAVEN_INSTALL_DIRECTORY]
export PATH=$PATH:$MAVEN_HOME/bin
export SPARK_HOME=[SPARK_INSTALL_DIRECTORY]
export PATH=$PATH:$SPARK_HOME/bin
cd /Users/USER_NAME/spark-mllib-sample-app
mvn clean install
mvn eclipse:clean eclipse:eclipse

运行 Spark 程序,命令如下:
在 Windows 环境下:

复制代码
%SPARK_HOME%\bin\spark-submit --class "org.apache.spark.examples.mllib.JavaRecommendationExample" --master local[*] target\spark-mllib-sample-1.0.jar

在 Linux 或者 MAC 环境下:

复制代码
$SPARK_HOME/bin/spark-submit --class "org.apache.spark.examples.mllib.JavaRecommendationExample" --master local[*] target/spark-mllib-sample-1.0.jar

Spark MLlib 应用监控

使用 Spark 的 web 控制台可以进行监控程序运行状态。这里只给出程序运行的有向无环图(DAG):

图 4 DAG 的可视化

结论

Spark MLlib 是 Spark 实现的机器学习库中的一种,经常用来做业务数据的预测分析,比如个性化推荐引擎和异常监测系统。

作者信息:侠天,专注于大数据、机器学习和数学相关的内容,并有个人公众号:bigdata_ny 分享相关技术文章。

查看英文原文: Big Data Processing with Apache Spark - Part 4: Spark Machine Learning

2016-06-06 19:0811520
用户头像

发布了 43 篇内容, 共 28.5 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

架构师第一期作业(第三周)

Cheer

作业

原创视频 | 架构漫谈—如何创造复杂而有序的软件系统【含课件下载】

编程道与术

Java 编程 架构 软件开发 软件架构

手把手教你:将 ClickHouse 集群迁至云上

腾讯云大数据

大数据 Clickhouse

腾讯云大数据发布最新产品矩阵,助力企业整合打通海量数据

腾讯云大数据

大数据

用go语言实现快排

Sean

算法 快速排序 Go 语言

倒计时!Pulsar Summit Asia 2020 演讲征集

Apache Pulsar

开源 云原生 pulsar Apache Pulsar 消息中间件

你在开发过程中使用Git Rebase还是Git Merge?

华为云开发者联盟

git 华为 管理 代码

区块链带来的技术创新和变革

CECBC

区块链技术 经济

持续引领大数据行业发展,腾讯云发布全链路数据开发平台WeData

腾讯云大数据

大数据

打造一个全功能的浏览器

Daniel

为什么推广ipv6以及网站ipv6改造基本步骤

MySQL从删库到跑路

Web IP 网络

华为云推出全自研数据库,GaussDB(openGauss)能否撑起一片天?

华为云开发者联盟

数据库 数据 gauss db

线段树(Segment Tree)

zayfen

算法 线段树 segment tree

第二周-学习总结-框架设计原则

莫森

极客大学架构师训练营

第二周-命题作业

莫森

极客大学架构师训练营

LeetCode题解:641. 设计循环双端队列,使用双向链表,JavaScript,详细注释

Lee Chen

大前端 LeetCode

看看别人是怎么面试蚂蚁金服的!社招Java面经分享

Java架构师迁哥

Java 阿里巴巴 面试 蚂蚁金服

原创 | 使用JPA实现DDD持久化-JPA,Hibernate与Spring Data JPA

编程道与术

Java hibernate Spring C Data jpa

数字货币视域下的金融安全实现路径

CECBC

区块链 数字货币

揭开500亿“区块链”骗局

CECBC

法律 传销

架构师训练营第三周学习总结

邓昀垚

极客大学架构师训练营

为什么90%的“码农”做不了软件“架构师”?

Java架构师迁哥

Java 学习 架构师

jdk 源码系列之StringBuilder、StringBuffer

sinsy

Java jdk 源码解析

原创 | 正确区分属性和字段

编程道与术

Java hibernate 编程 软件开发 jpa

原创 | 使用JPA实现DDD持久化-JPA vs MyBatis

编程道与术

Java hibernate 编程 mybatis jpa

架构师训练营第三周作业

文智

极客大学架构师训练营

腾讯云副总裁刘煜宏:大数据平台算力弹性资源池达500万核,国内最强

腾讯云大数据

大数据

Greenplum 性能优化之路 --(一)分区表

腾讯云大数据

大数据

原创 | 使用JPA实现DDD持久化-O/R阻抗失配(2/2)

编程道与术

Java hibernate DDD JDBC jpa

致谢!华为全联接2020精彩回顾

华为云开发者联盟

华为 华为云 智能 hdc

一次注定失败的裸面

escray

ruby 程序员 面试 面经

Spark大数据处理系列之Machine Learning_数据库_Srini Penchikala_InfoQ精选文章