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 的方式评估了这个模型的效果。