写点什么

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:0811614
用户头像

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

关注

评论

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

从0到1:培训机构排课小程序开发笔记一

CC同学

工作目标管理软件选型指南:9款推荐

爱吃小舅的鱼

工作目标管理软件

mysql索引概念、定义和使用

百度搜索:蓝易云

FinOps三人行:云计算时代的FinOps 反模式和SRE(文字+视频版)

雅菲奥朗

云计算 SRE FinOps FinOps 认证 FinOps 培训

全面图解Docker架构设计:掌握Docker全链路思维/实战/优化(小白到大师篇[1])

肖哥弹架构

Docker DevOps 效能

这款产品连续三年被选为“未来你想使用的数据库”第一名

TiDB 社区干货传送门

数据库架构选型 数据库前沿趋势

哪款多任务管理系统适合你?2024年10大选择

爱吃小舅的鱼

多任务管理系统

全面图解Docker架构设计:掌握Docker全链路思维/实战/优化(小白到大师篇[2])

肖哥弹架构

Docker DevOps

哪些工作管理系统适合团队协作?9款工具推荐

爱吃小舅的鱼

工作管理系统

AI大模型技术前沿:人工智能大模型应用工程师如何塑造行业未来?

雅菲奥朗

人工智能 大模型 人工智能工程师 人工智能工程师培训 人工智能大模型应用工程师

安卓AI虚拟女友项目开发之智能语音-语音唤醒应用功能开发

陆通

Ubuntu中设置代理的方式

百度搜索:蓝易云

TiDB排行再升5位;盘点平凯数据库的发明专利(2024上半年公布)

TiDB 社区干货传送门

数据库架构选型

Tomcat服务启动失败:java.lang.OutOfMemoryError: Java heap space

百度搜索:蓝易云

征程6 工具链常用工具和API 整理

地平线开发者

自动驾驶 算法

2024年9月文章一览

codists

编程人

通过curl命令分析http接口请求各阶段的耗时等

百度搜索:蓝易云

spring-kafka中ContainerProperties.AckMode详解

百度搜索:蓝易云

ICT项目系统全解析:选型、使用与优势大对比

爱吃小舅的鱼

项目管理 ICT

你不知道的Requests进阶技巧:用Retry实现完美重试

LLLibra146

python 爬虫 requests urllib retry

Nacos改为MySQL数据源报错:No DataSource set

百度搜索:蓝易云

FinOps现状分析:行业趋势与未来展望

雅菲奥朗

FinOps 云成本管理 FinOps 认证 云财务管理

安卓AI数字虚拟人项目实战之Android开发环境搭建

陆通

Python中的​​display​​​函数from IPython.display import display

百度搜索:蓝易云

centos下Makefile独立模块编译ko

百度搜索:蓝易云

三节点TiDB 集群内存控制文档

TiDB 社区干货传送门

哪些工作计划管理软件适合团队协作?10款详解

爱吃小舅的鱼

工作计划管理软件

如何选择工作日程管理系统?9款工具指南

爱吃小舅的鱼

工作日程管理工具

Java(day15):while循环语句

百度搜索:蓝易云

yolov5模型s,l,m,x的区别

百度搜索:蓝易云

征程6 NV12 理论与代码详解

地平线开发者

自动驾驶; 算法、

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