红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

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

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2016-06-06 19:0811180
用户头像

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

关注

评论

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

TiDB 6.0 Book Rush | TiDB 和 Python 的 CRUD 应用开发实践

TiDB 社区干货传送门

6.x 实践

6.0体验:TiKV 重启后 Leader 均衡加速

TiDB 社区干货传送门

管理与运维 新版本/特性解读 6.x 实践

TiDB 6.0: 让 TSO 更高效

TiDB 社区干货传送门

实践案例 性能测评 新版本/特性解读 6.x 实践

TiKV 节点重启后业务恢复速度(leader 平衡速度)v6.0 vs v5.1.2对比测试

TiDB 社区干货传送门

版本测评 6.x 实践

关于HTAP与HSAP

TiDB 社区干货传送门

数据库架构设计

基于tidbV6.0探索tiflash在多标签组合场景下的使用

TiDB 社区干货传送门

实践案例 6.x 实践

基于 TiDB v6.0 部署两地三中心

TiDB 社区干货传送门

实践案例 6.x 实践

TiCDC系列分享-02-剖析同步模型与基本架构

TiDB 社区干货传送门

迁移 备份 & 恢复 大数据场景实践 实时数仓场景实践 数据中台场景实践

TiDB库表设计和使用规范

TiDB 社区干货传送门

管理与运维

一次断电故障引起TiDB无法启动的问题带来的几点思考

TiDB 社区干货传送门

管理与运维 故障排查/诊断

内存悲观锁原理浅析与实践

TiDB 社区干货传送门

版本测评 新版本/特性解读 6.x 实践 TiKV 底层架构

TiDB Lightning在数据迁移中的应用与错误处理实践

TiDB 社区干货传送门

迁移 管理与运维 6.x 实践

tiflash 6.0 on K8s 扩容与新特性实践

TiDB 社区干货传送门

版本测评 安装 & 部署 新版本/特性解读 扩/缩容 6.x 实践

TiDB Sysbench 性能对比测试报告 - v5.1.4 对比 v6.0.0 DMR

TiDB 社区干货传送门

6.x 实践

TiDB与MySQL的模糊查询大小写

TiDB 社区干货传送门

开发语言

TiDB 查询优化及调优系列(四)查询执行计划的调整及优化原理

TiDB 社区干货传送门

TiDB 6.0 新特性解读 | 离线包变更

TiDB 社区干货传送门

6.x 实践

论分布式数据库TiDB架构的“存”与“算”

TiDB 社区干货传送门

数据库架构设计

TiCDC系列分享-01-简述产生背景及使用概况

TiDB 社区干货传送门

迁移 安装 & 部署 扩/缩容 应用适配 大数据场景实践

MySQL正常执行的SQL在TiDB中变慢了

TiDB 社区干货传送门

管理与运维 故障排查/诊断

TiDB 冷热存储分离解决方案

TiDB 社区干货传送门

管理与运维 版本测评 6.x 实践 大数据场景实践

TiDB HTAP特性的应用场景简析

TiDB 社区干货传送门

数据库架构设计

TiDB 6.0: 统计信息优化改进

TiDB 社区干货传送门

管理与运维 新版本/特性解读 6.x 实践

一次SSD磁盘寿命耗尽导致的TiDB集群写入变慢问题处理

TiDB 社区干货传送门

故障排查/诊断

TiDB 和 C# 的简单 CRUD 应用程序

TiDB 社区干货传送门

6.x 实践

基于tidbV6.0探索索引优化思路

TiDB 社区干货传送门

实践案例 6.x 实践

TiDB v5.4.0 与 v6.0.0 的 sysbench 性能对比

TiDB 社区干货传送门

性能测评 6.x 实践

TiCDC系列分享 Open API与业务系统集成

TiDB 社区干货传送门

应用适配 6.x 实践

排查分析Empty regions 较大原因

TiDB 社区干货传送门

性能调优 实践案例 集群管理 管理与运维

TiFlash 源码阅读(二)计算层概览

TiDB 社区干货传送门

TiDB 查询优化及调优系列(三)慢查询诊断监控及排查

TiDB 社区干货传送门

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