天天看點

基于Spark的機器學習實踐 (二) - 初識MLlib(下)2 MLlib的資料結構3 MLlib與ml4 MLlib的應用場景

2 MLlib的資料結構

2.1 本地向量(Local vector)

具有整數類型和基于0的索引和雙類型值

本地向量的基類是

Vector

,我們提供了兩個實作:

DenseVector

SparseVector

◆ 本地向量是存儲在本地節點上的,其基本資料類型是Vector.

其有兩個子集,分别是密集的與稀疏的

  • 密集向量由表示其條目值的雙數組支援
  • 而稀疏向量由兩個并行數組支援:索引和值

我們一般使用Vectors工廠類來生成

例如:

◆ Vectors.dense(1.0,2.0,3.0) 主要使用稠密的

◆ Vectors.sparse(3,(0,1),(1,2),(2,3)) 稀疏的了解即可

向量(1.00.03.0)可以密集格式表示為1.00.03.0,或以稀疏格式表示為(3,02,1.03.0),其中3是矢量的大小。

2.2 标簽資料(Labeled point)

與标簽/響應相關聯的局部矢量,密集或稀疏

在MLlib中,用于監督學習算法。 我們使用雙重存儲标簽,是以我們可以在回歸和分類中使用标記點

對于二進制分類,标簽應為0(負)或1(正)

對于多類分類,标簽應該是從零開始的類索引:0,1,2,…

标記點由事例類 

LabeledPoint

 表示

◆ 我們在前面介紹過"監督學習”, 知道監督學習是(x,y)資料形式,其中這個y就是标簽,X是特征向量

标簽資料也是一樣,我們看一下這個代碼

LabeledPoint(1.0,Vectors.dense(1.0,2.0,3.0))
      

2.3 本地矩陣

本地矩陣具有整數類型的行和列索引和雙類型值,存儲在單個機器上。 MLlib支援密集矩陣,其入口值以列主序列存儲在單個雙陣列中,稀疏矩陣的非零入口值以列主要順序存儲在壓縮稀疏列(CSC)格式中

與向量相似,本地矩陣類型為Matrix , 分為稠密與稀疏兩種類型。同樣使

用工廠方法Matrices來生成。但是要注意,MLlib的矩陣是按列存儲的。

例如下面建立一個3x3的機關矩陣:

Matrices.dense(3,3,Array(1,0,0,0,1,0,0,0,1))
      

類似地,稀疏矩陣的建立方法

Matrices.sparse(3,3,Array(0,1,2,3),Array(0,1,2),Array(1,1,1))
      

2.4 分布式矩陣

◆ 把一個矩資料分布式存儲到多個RDD中

将分布式矩陣進行資料轉換需要全局的shuffle函數

最基本的分布式矩陣是RowMatrix.

分布式矩陣具有長類型的行和列索引和雙類型值,分布式存儲在一個或多個RDD中。選擇正确的格式來存儲大型和分布式矩陣是非常重要的。将分布式矩陣轉換為不同的格式可能需要全局shuffle,這是相當昂貴的。到目前為止已經實作了四種類型的分布式矩陣。

基本類型稱為RowMatrix。 RowMatrix是沒有有意義的行索引的行向分布式矩陣,例如特征向量的集合。它由其行的RDD支援,其中每行是局部向量。我們假設RowMatrix的列數不是很大,是以單個本地向量可以合理地傳遞給驅動程式,也可以使用單個節點進行存儲/操作。 IndexedRowMatrix與RowMatrix類似,但具有行索引,可用于辨別行和執行連接配接。 CoordinateMatrix是以坐标 list(COO) 格式存儲的分布式矩陣,由其條目的RDD支援。 BlockMatrix是由MatrixBlock的RDD支援的分布式矩陣,它是(Int,Int,Matrix)的元組。

2.5 分布式資料集

◆ RDD Dataset DataFrame都是Spark的分布式資料集的資料格式

三者在一定程度上可以互相轉化,有各自的适用範圍

其中RDD是最為基礎與簡單的一種資料集形式

2.5.1 RDD

◆ RDD(Resilient Distributed Datasets),彈性分布式資料集,是Spark中結構最簡單,也是最常用的一類資料集形 式。

可以了解為把輸入資料進行簡單的封裝之後形成的對記憶體資料的抽象。

基于Spark的機器學習實踐 (二) - 初識MLlib(下)2 MLlib的資料結構3 MLlib與ml4 MLlib的應用場景

2.5.2 Dataset

◆ 與RDD分行存儲,沒有列的概念不同,Dataset 引入了列的概念,這一點類似于一個CSV檔案結構。類似于一個簡單的2維表

基于Spark的機器學習實踐 (二) - 初識MLlib(下)2 MLlib的資料結構3 MLlib與ml4 MLlib的應用場景

2.5.3 DataFrame

DataFrame結構與Dataset 是類似的,都引|入了列的概念

與Dataset不同的是,DataFrame中的毎一-行被再次封裝刃Row的対象。需要通過該対象的方法來擷取到具體的值.

3 MLlib與ml

3.1 Spark提供的機器學習算法

◆ 通用算法

分類,回歸,聚類等

◆ 特征工程類

降維,轉換,選擇,特征提取等

◆數學工具

機率統計 ,矩陣運算等

◆ pipeline 等

3.2 MLlib與ml的差別

MLlib采用RDD形式的資料結構,而ml使用DataFrame的結構.

◆ Spark官方希望 用ml逐漸替換MLlib

◆ 教程中兩者兼顧

如無特殊指明,MLlib指代Spark的機器學習元件

4 MLlib的應用場景

4.1 海量資料的分析與挖掘

◆ 例如對海量的房屋出租,出售資訊進行資料挖掘,預測房價價格,租金

◆ 典型資料集:波士頓房價資料集

◆ 主要用到傳統的資料挖掘算法,例如使用回歸算法

4.2 大資料機器學習系統

◆ 例如自然語言處理類的系統,推薦系統等

◆ 推薦系統,需要實時進行資料的收集,統計,任務排程,定期更新訓練模型

◆ 核心實作: Spark Streaming +MLlib

繼續閱讀