Spark MLlib知識點學習整理


MLlib的設計原理:把數據以RDD的形式表示,然后在分布式數據集上調用各種算法。MLlib就是RDD上一系列可供調用的函數的集合。

操作步驟:

1、用字符串RDD來表示信息。

2、運行MLlib中的一個特征提取算法來吧文本數據轉換為數值的特征。給操作會返回一個向量RDD。

3、對向量RDD調用分類算法,返回一個模型對象,可以使用該對象對新的數據點進行分類。

4、使用MLlib的評估函數在測試數據集上評估模型。

 

機器學習基礎

機器學習算法嘗試根據 訓練數據 使得表示算法行為的數學目標最大化,並以此來進行預測或作出決定。包括分類、回歸、聚類,每種都有不一樣的目標。 所有的學習算法都需要定義每個數據點的特征集,也就是傳給學習函數的值。

更重要的在於如何去正確的定義特征。  例如: 在產品推薦的任務中,僅僅機上一個額外的特征(推薦給用戶的書籍也可能取決於用戶看過的電影),就有可能極大地改進結果。 當數據已成為特征向量的形式后,大多數機器學習算法會根據這些向量優化一個定義好的數學模型。 然后算法會再運行結束時返回一個代表學習決定的模型。

 

MLlib數據類型

1、Vector

一個數學向量。MLlib既支持稠密向量也支持稀疏向量。前者表示向量的每一位都存儲下來,后者則存儲非零位以節省空間。

稠密向量:把所有唯獨的值存放在一個浮點整數組中。 

稀疏向量只把各維度中的非零值存儲下來。當最多只有10%的元素為非零元素時,通常更傾向於使用稀疏向量。

spark中創建向量的方式有

import org.apache.spark.mllib.linalg.Vectors

//創建稠密向量<1.0,2.0,3.0>;Vectors.dense接收一串值或一個數組
val denseVec1 = Vectors.dense(1.0,2.0,3.0))
val denseVec2 = Vectors.dense(Array(1.0,2.0,3.0))

//創建稀疏向量<1.0,0.0,2.0,0.0>
向量的維度(4) 以及非零位的位置和對應的值
val sparseVec1 = Vectors.sparse(4,Array(0,2),Array(1.0,2.0))

 

2、LabeledPoint

諸如分類和回歸的算法這樣的監督學習算法中,LabeledPoint用來表示帶標簽的數據點。它包含一個特征向量與一個標簽(由一個浮點數表示),位置在mllib.regression包中。

 

3、Rating

用戶對一個產品的評分,在mllib.recomendation包中,用於產品推薦。

 

4、各種Model類

每個Model都是訓練算法的結果,一般有一個predict()方法可以用來對新的數據點或數據點組成的RDD應用該模型進行預測。

 

特征轉化

TF-IDF:詞頻,逆文檔頻率是一種用來從文本文檔中生成特征向量的簡單方法。它為文檔中的每個詞計算兩個統計值:一個是詞頻(TF),也就是每個詞在文檔中出現的次數,另一個是逆文檔頻率(IDF),用來衡量一個詞語特定文檔的相關度。

MLlib有兩個算法可以用來計算TF-IDF:HashTF和TF

HashTF從一個文檔中計算出給定大小的詞頻向量。為了將詞和向量順序對應起來,所以使用了哈希。HashingTF使用每個單詞對所需向量的長度S取模得出的哈希值,把所有單詞映射到一個0到S-1之間的數字上。由此可以保證生成一個S維的向量。隨后當構建好詞頻向量后,使用IDF來計算逆文檔頻率,然后將它們與詞頻相乘計算TF-IDF。

 

MLlib統計

1、Statistics.colStats(rdd)

計算由向量組成的RDD的統計性綜述,保存着向量集合中每列的最大值、最小值、平均值和方差。

 

2、statistics.corr(rdd,method_

計算由向量組成的RDD中的列間的相關矩陣,使用皮卡森相關或斯皮爾曼相關中的一種。

 

3、statistics.corr(rdd1,rdd2,method)

計算兩個由浮點值組成的RDD的相關矩陣。

 

4、Statistics.chiSqTest(rdd)

計算由LabeledPoint對象組成的RDD中每個特征與標簽的皮卡森獨立性測試結果。返回一個ChiSqTestResult對象,其中有p值、測試統計及每個特征的自由度。

 

分類與回歸

監督試學習指算法嘗試使用有標簽的訓練數據(已知結果的數據點)根據對象的特征預測的結果。在分類中,預測出的變量是離散的(就是一個在有限集中的值,叫做類別) 。比如,分類可能是將郵件文衛垃圾郵件和非垃圾郵件,也有可能是文本所使用的語言。在回歸中,預測出的是變量是連續的(根據年齡和體重預測一個人的身高)

 

線性回歸:

1、numIteratrions

要運行的迭代次數(默認值:100)

 

2、stepSize

梯度下降的步長(默認值:1.0)

 

3、intercept

是否給數據加上一個干擾特征或者偏差特征--也就是一個值始終未1的特征(默認值:false)

 

4、regParam

Lasso和ridge的正規化參數(默認值:1.0)

 

import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.regression.LinearRegressionWithSGD

val points: RDD[LabeledPoint] = //..
val lr = new LinearRegressiionWithSGD().setNumIterations(200).setIntercept(true)
val model = lr.run(points)
println("weight: %s, intercept: %s".format(model.weights, model.intercept))

 

邏輯回歸

用來尋找一個分割陰性和陽性示例的線性分割平面。在MLlib中,接收一組標簽為0或1的LabeledPoint,返回可以預測新點的分類的LogisticRegressionModel對象。

 

決策樹與隨機深林

 

決策樹是一個靈活的模型,可以用來進行分類,也可以用來進行回歸。決策樹以節點樹的形式表示,每個節點基於數據的特征作出一個二元決定(比如這個人的年齡是否大於20?),而樹的每個葉節點則包含一種預測結果(例如,這個人是不是會買一個產品?)決策樹的吸引力在於模型本身容易檢查,而且決策樹既支持分類的特征,也支持連續的特征。

 

 

參考於:《Spark快速大數據分析》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM