Machine Learning with Spark 简介

本文主要介绍 《Machine Learning with Spark》这本书各章节的主要内容,以及提供该书各章节对应的 python 代码。

这本书主要介绍了如何通过 spark 处理大规模的数据,以及利用这些处理过的数据通过 MLlib 进行模型的训练。全书共分为 10 章,涵盖了数据的预处理,推荐模型,分类模型,回归模型,聚类模型,数据降维,文本处理以及 Spark 流式处理等内容。

书中的代码大部分是 scala, 某些章节是 python,这里全部通过 python 重写,全部代码参见 github,为了便于交互,采用了 Jupyter Notebook 的形式,且通过 HDFS 存储数据文件,关于环境的搭建可参考这篇文章

下面简单介绍各个章节的内容(从第三章开始),更多细节可参考具体代码

Chapter 3:Obtaining, Processing, and Preparing Data with Spark

这章主要介绍了如何通过 spark 提供的 API 从原始数据中提取特征,如一些常用的函数 map, filter, reduceByKey 等,以及如何通过 spark 进行特征的归一化和处理以下几种 feature

  1. category feature:one-hot 编码
  2. text feature:抽取文本 -> 分词 -> 创建字典,为每个单词分配一个唯一的 id -> 将文本转为向量
  3. derived feature:这个主要是指从非结构化的特征中抽取出结构化的特征,如给出一个日期,可以提取出其中的小时部分,然后进行分段,分为 morning,noon,afternoon,evening 四个阶段,然后再进行 one-hot 编码

Chapter 4:Building a Recommendataion Engine with Spark

这一章主要介绍如何通过 spark 构建一个推荐系统,采用了电影评分数据集 MovieLens 100k,使用的是经典的协同过滤技术,而 spark 的 MLlib 则提供了 alternating least squares (ALS) 这种基于矩阵分解的方法用于求解协同过滤问题,通过 ALS 对用户 - 物品评分矩阵进行分解,能够为每个用户或物品推荐 top k 个最相似的用户或物品。度量 ALS 算法效果的指标为 MSE,RMSE 等。

Chapter 5:Building a Classifcation Model with Spark

这一章主要介绍分类模型,采用了 Kaggle 上的一个数据集,通过 MLlib 提供的 LogisticsRegression,SVM,NaiveBayes,DecisionTree 等分类器对其进行分类,并且比较了进行 feature standardization 前后的效果。

Chapter 6:Building a Regression Model with Spark

这一章主要介绍了回归模型,采用了 bike sharing 数据集,主要通过 MLlib 提供的回归模型 Linear Regression 和 Decision Tree 进行了预测,并且对目标变量进行了 log 变换,目的是让目标变量更加接近 正态分布,因为像 Linear Regression 这一类模型对目标函数值的分布做了正态分布的假设。

Chapter 7:Building a Clustering Model with Spark

这一章主要介绍了聚类模型,采用的是前面提到的 MovieLens 100k 数据集,通过 ALS 进行矩阵分解,为每个用户 (物品) 提取出一个隐含属性向量作为用户 (物品) 的特征向量。然后通过 K-Means 进行聚类。

聚类结果的评估有两种方法:一种是 Internal evaluation,也就是只用数据本身进行评估,一般通过 WCSS (within-cluster sums of squares) 评估;第二种则是 External evaluation,即还通过数据的标签进行评估,评估的方法就是常见的准确率等指标。由于聚类往往是无监督方法,因此数据往往是不带标签的, 因此第一种评估方法比较常见。

Chapter 8:Dimensionality Reduction with Spark

这一章主要介绍了 spark 中的降维技术,采用了 LFW(Labeled Faces in the Wild) 人脸数据集,因此也介绍了图像处理的一些基本操作 (基于 python 的 opencv 库),然后通过两种方法:PCA 和 SVD,进行了数据的降维,实际上这两种方法的关系非常密切,且可以达到相同的效果。同时介绍了 Eigenface 的概念,Eigenface 实际上就是 PCA 提取出来的特征向量再变为人脸图像。

Chapter 9:Advanced Text Processing with Spark

这一章主要介绍了 Spark 中的文本处理技术,采用了 20 Newsgroups 数据集,介绍了文本处理的基本操作

  1. 分词
  2. 过滤停止词,低频词
  3. 构建词典
  4. 基于词典为每篇文本构造一个向量

在向量的基础上加上 TF-IDF 便可算出表示文本的 TF-IDF 向量,基于这个 TF-IDF 向量可做文本相似性的比较,而如果文本本身是有标签的,可以将 TF-IDF 向量作为文本特征,进而训练一个分类模型。

最后这章还简单介绍了 Word2Vec 模型及其简单应用。

Chapter 10:Real-time Machine Learning with Spark Streaming

这章主要介绍了用于处理实时流的 Spark Streaming, 模拟了产生实时流的 producer ,通过 Spark Streaming 处理这些信息流后训练了一个 streaming regression 模型,并通过 online 的方式评估了这个模型的效果。