1. 程式人生 > >PySpark學習筆記(4)——MLlib和ML介紹

PySpark學習筆記(4)——MLlib和ML介紹

Spark MLlib是Spark中專門用於處理機器學習任務的庫,但在最新的Spark 2.0中,大部分機器學習相關的任務已經轉移到Spark ML包中。兩者的區別在於MLlib是基於RDD源資料的,而ML是基於DataFrame的更抽象的概念,可以建立包含從資料清洗到特徵工程再到模型訓練等一系列機器學習工作。所以,未來在用Spark處理機器學習任務時,將以Spark ML為主。

Spark ML主要包括如下三個部分的功能:

(1)資料準備:特徵提取、變換、選擇和一些自然處理方法。

(2)機器學習演算法: 常見的分類、聚類、迴歸演算法。

(3)實用程式:常見的統計方法和模型評估方法。

Spark ML軟體包主要包括三個抽象類:轉換器(Transformer

)、評估器(Estimator)管道(Pipeline)

1.轉換器

PySpark ML中的轉換器的實現通常需要將一個新列附加到DataFrame來轉換資料。當從轉換器基類(pyspark.ml.Transformer)派生時,每個新的轉換器類需要實現.transform()方法,該方法要求傳遞一個要被轉換的DataFrame(強制性要求)。

pyspark.ml.feature模組提供了許多種轉換器,部分常見轉換器的簡單介紹如下所示:

(1)Binarizer:根據指定的閾值將連續變數轉換為對應的二進位制值

(2)Bucketizer:根據閾值列表將連續變數轉換為多項值(即將連續變數離散化到指定的範圍區間)。

(3)ChiSqSelector:此功能可以通過卡方(Chi-Square)檢驗的方法來完成分類模型中數量特徵的選擇。

(4)countVectorizer:該方法主要用於標記文字。

(5)HashingTF: 雜湊轉換器,輸入為標記文字的列表,返回一個帶有計數的有預定長度的向量。

(6)IDF:該方法計算文件列表的逆向檔案頻率。(需要提前用HashingTF或CountVectorizer將文件轉換為向量表示)

(7)OneHotEncoder:該方法將分類編碼為二進位制向量列。

(8)PCA: 使用主成分分析執行資料降維。

(9)StopWordRemover: 從標記文字中刪除停用詞。

(10)Tokenizer

: 分詞器,將該預設分詞器將字串轉成小寫,然後以空格為分隔符分詞。

(11)VectorIndexer: 該方法為類別列生成索引向量。

(12)VectorSlicer: 給定一個索引列表,它從特徵向量中提取值。

(13)Word2Vec: 該方法將一個字串(或句子)作為輸入,將其轉換為{string,vector}格式的對映、

2.評估器

PySpark ML中的評估器是指使用各種統計模型觀測物件做預測或分類。如果是從抽象評估器類(pyspark.ml.Estimator)派生的,新模型必須實現,fit()方法,該方法用DataFrame中的資料和某些引數(預設或自定義的)來擬合模型。

PySpark ML中的評估器模型主要有分類模型、迴歸模型、聚類模型和推薦模型等。

2.1 分類模型(pyspark.ml.classification)

(1)LogisticRegression: (支援二項和多項(softmax)邏輯迴歸)

        邏輯迴歸使用一個對數函式,將輸入變數和分類類別進行關聯,可用於解決二類(Sigmoid函式)和多類分類問題。

(2)DecisionTreeClassifier:(支援二進位制和多類標籤)

       該分類器通過構建一個決策樹來預測一個觀察物件的所屬類別。

(3)GBTClassifier: (支援二進位制標籤、連續特徵和分類特徵)

     梯度提升決策樹(Gradient Boosting Decision Tree)是整合分類方法的一種,其基學習器是分類迴歸樹CART。通過Boosting方法將多個弱分類器組合成一個強分類器。

(4)RandomForestClassifier: (支援二元標籤和多項標籤)

     隨機森林決策樹是另一種整合分類方法,其基學習器是決策樹。通過Bagging方法(投票法)多個弱分類器的分類眾數作為最終的分類結果。

(5)NaiveBayes: (支援二元標籤和多項標籤)

    該模型基於貝葉斯原理,使用條件概率理論對觀測進行分類。

(6)MultilayerPerceptronClassifier:

    多層感知分類器至少包含三個完全相連的人造神經元層(建立模型時需要指定引數):輸入層(神經元個數需要和輸入資料集中的特徵數量一樣),隱藏層(至少一個,包含有非線性變換函式)和輸出層(神經元個數需要與輸出類別個數一樣)。

(7)OneVsRest:

   該模型將多類問題轉換為二類問題。

2.2 迴歸模型(pyspark.ml.regression)

(1)DecisionTreeRegressor: 用於處理連續標籤的決策樹。

(2)GBTRegressor: 用於處理連續標籤的梯度提升樹。

(3)RandomForestRegressor:用於處理連續標籤的隨機森林決策。

(4)LinearRegression: 簡單的線性迴歸模型,它假設輸入特徵與連續的輸出標籤之間存在某種線性關係。

(5)GeneralizedLinearRegression:

       廣義線性迴歸模型根據其所使用的核心(gaussian、binomial、gamma、possion)的不同,能夠解決不同型別的線性迴歸問題。

2.3 聚類模型(pyspark.ml.clustering)

聚類是一系列無監督的模型,用於查詢資料中的隱含模式

(1)KMeans:k均值演算法,該演算法將資料分為k個簇,迭代地搜尋那些使每個觀察點和它所屬簇的質點之間距離平方和最新的那些質點。

(2)BisectingKMeans:二分k均值演算法,結合 了k均值演算法和層次聚類演算法。最初該演算法將所有觀察點作為一個簇,然後將資料迭代地分解為k個簇。

(3)GaussianMixture:高斯混合模型,該方法使用具有未知引數的k個高斯分佈來剖析資料集。使用期望最大化演算法,通過最大化對數似然函式找到高斯函式。

(4)LDA:潛在狄利克雷分配模型(Latent Dirichlet Allocation),可以用來識別大規模文件集或語料庫中潛藏的主題資訊

2.4 推薦模型(pyspark.ml.recommendation)

(1)ALS:交替最小二乘(Alternating Least Squares),是一種基於協同過濾原理的推薦演算法。在已知使用者(User)數量m和物品(Item)數量n的前提下,可以通過奇異值分解(Singular Value Decomposition,SVD)的方法,將使用者—商品矩陣A_mxn分解為矩陣U和V,如下所示:

然後,通過ALS方法對其進行優化(先固定其中一個變數,優化另一個;然後再固定另一個,優化前一個,交替迭代進行),最後可以據此得出使用者對特定物品的偏好(評分或偏好值)。

3.管道

PySpark ML中的管道是指從轉換到評估的端到端的過程,這個過程可以對輸入的DataFrame原始資料執行必要的資料轉換操作,最後評估統計模型。