「大數據」(八十五)Spark之MLlib體驗

【導讀:數據是二十一世紀的石油,蘊含巨大價值,這是·情報通·大數據技術系列第[85]篇文章,歡迎閱讀和收藏】

1 基本概念

MLlib 是 Spark 的機器學習( Machine Learning )庫,旨在簡化機器學習的工程實踐工作,並方便擴展到更大規模。 MLlib 由一些通用的學習算法和工具組成,包括分類、迴歸、聚類、協同過濾、降維等,同時還包括底層的優化原語和高層的管道 API 。具體來說,其主要包括以下幾方面的內容:

1. 算法工具:常用的學習算法,如分類、迴歸、聚類和協同過濾;

2. 特徵化工具:特徵提取、轉化、降維,和選擇工具;

3. 管道 (Pipeline) :用於構建、評估和調整機器學習管道的工具 ;

4. 持久性:保存和加載算法,模型和管道 ;

5. 實用工具:線性代數,統計,數據處理等工具。

Spark 機器學習庫從 1.2 版本以後被分為兩個包:

l spark.mllib 包含基於 RDD 的原始算法 API 。 Spark MLlib 歷史比較長,在 1.0 以前的版本即已經包含了,提供的算法實現都是基於原始的 RDD 。

l spark.ml 則提供了基於 DataFrames 高層次的 API ,可以用來構建機器學習工作流( PipeLine )。 ML Pipeline 彌補了原始 MLlib 庫的不足,向用戶提供了一個基於 DataFrame 的機器學習工作流式 API 套件。

使用 ML Pipeline API 可以很方便的把數據處理,特徵轉換,正則化,以及多個機器學習算法聯合起來,構建一個單一完整的機器學習流水線。這種方式提供了更靈活的方法,更符合機器學習過程的特點,也更容易從其他語言遷移。 Spark 官方推薦使用 spark.ml 。開發者需要注意的是,從 Spark2.0 開始,基於 RDD 的 API 進入維護模式(即不增加任何新的特性),並預期於 3.0 版本的時候被移除出 MLLib 。因此,將以 ml 包為主進行介紹。

Spark 在機器學習方面的發展非常快,目前已經支持了主流的統計和機器學習算法。縱觀所有基於分佈式架構的開源機器學習庫, MLlib 可以算是計算效率最高的。 MLlib 目前支持 4 種常見的機器學習問題 : 分類、迴歸、聚類和協同過濾。下表列出了目前 MLlib 支持的主要的機器學習算法:

「大數據」(八十五)Spark之MLlib體驗

2 術語解釋

1. Spark :最初由美國加州伯克利大學( UCBerkeley )的 AMP ( Algorithms, Machines and People )實驗室於 2009 年開發,是基於內存計算的大數據並行計算框架,可用於構建大型的、低延遲的數據分析應用程序。

2. RDD :是 Resillient Distributed Dataset (彈性分佈式數據集)的簡稱,是分佈式內存的一個抽象概念,提供了一種高度受限的共享內存模型。

3. GBT : Gradient Boosted Trees ,或稱為梯度提升決策樹。 GBT 算法是由 Friedman 於 1999 年首次完整的提出,該算法可以實現迴歸、分類和排序。 GBT 的優點是特徵屬性無需進行歸一化處理,預測速度快,可以應用不同的損失函數等。

3 MLlib 數據類型、統計工具和算法

3.1 MLlib 基本數據類型

MLLib 提供了一序列基本數據類型以支持底層的機器學習算法。主要的數據類型包括:本地向量、標註點( Labeled Point )、本地矩陣等。本地向量與本地矩陣作為公共接口提供簡單數據模型,底層的線性代數操作由 Breeze 庫和 jblas 庫提供。標註點類型用來表示監督學習( Supervised Learning )中的一個訓練樣本。

1 、

本地向量 ( Local Vector )

本地向量 存儲在單機上,其擁有整型、從 0 開始的索引值以及浮點型的元素值。 MLlib 提供了兩種類型的本地向量,稠密向量 DenseVector 和稀疏向量 SparseVector 。稠密向量使用一個雙精度浮點型數組來表示其中每一維元素,而稀疏向量則是基於一個整型索引數組和一個雙精度浮點型的值數組。例如,向量 (1.0, 0.0, 3.0) 的稠密向量表示形式是 [1.0,0.0,3.0] ,而稀疏向量形式則是 (3, [0,2], [1.0, 3.0]) ,其中, 3 是向量的長度, [0,2] 是向量中非 0 維度的索引值,表示位置為 0 、 2 的兩個元素為非零值,而 [1.0, 3.0] 則是按索引排列的數組元素值。

2 、 標註點 ( Labeled Point )

標註點 LabeledPoint 是一種帶有標籤( Label/Response )的本地向量,它可以是稠密或者是稀疏的。在 MLlib 中,標註點在監督學習算法中被使用。由於標籤是用雙精度浮點型來存儲的,故標註點類型在迴歸( Regression )和分類( Classification )問題上均可使用。例如,對於二分類問題,則正樣本的標籤為 1 ,負樣本的標籤為 0 ,而對於多類別的分類問題來說,標籤則應是一個以 0 開始的索引序列 :0, 1, 2 ...

在實際的機器學習問題中,稀疏向量數據是非常常見的, MLlib 提供了讀取 LIBSVM 格式數據的支持,該格式被廣泛用於 LIBSVM 、 LIBLINEAR 等機器學習庫。在該格式下,每一個帶標註的樣本點由以下格式表示:

label index1:value1 index2:value2 index3:value3 ...

其中 label 是該樣本點的標籤值,一系列 index:value 對則代表了該樣本向量中所有非零元素的索引和元素值。這裡需要特別注意的是, index 是以 1 開始並遞增的。

3 、 本地矩陣 ( Local Matrix )

本地矩陣 具有整型的行、列索引值和雙精度浮點型的元素值,它存儲在單機上。 MLlib 支持稠密矩陣 DenseMatrix 和稀疏矩陣 Sparse Matrix 兩種本地矩陣,稠密矩陣將所有元素的值存儲在一個列優先( Column-major )的雙精度型數組中,而稀疏矩陣則將非零元素以列優先的 CSC ( Compressed Sparse Column )模式進行存儲。

3.2 MLlib 基本統計工具

給定一個數據集,數據分析師一般會先觀察一下數據集的基本情況,稱之為彙總統計或者概要性統計。一般的概要性統計用於概括一系列觀測值,包括位置或集中趨勢(比如算術平均值、中位數、眾數和四分位均值),展型(比如四分位間距、絕對偏差和絕對距離偏差、各階矩等),統計離差,分佈的形狀,依賴性等。除此之外, spark.mllib 庫也提供了一些其他的基本的統計分析工具,包括相關性、分層抽樣、假設檢驗,隨機數生成等。


分享到:


相關文章: