MLlib
是 Spark 的機器學習庫,旨在簡化機器學習的工程實踐工作,並方便擴展到更大規模。MLlib
由一些通用的學習算法和工具組成,包括分類、回歸、聚類、協同過濾、降維等,同時還包括底層的優化原語和高層的管道 API。具體來說,主要包括以下幾方面的內容:
- 機器學習算法:常用的學習算法,如分類、回歸、聚類和協同過濾;
- 特征化工具:特征提取、轉化、降維和特征選擇等工具;
- 管道:由於構建、評估和調整機器學習管道的工具;
- 持久性:保存和加載算法,模型和管道;
- 實用工具:線性代數,統計和數據處理等工具。
DataFrame-based API
從 Spark 2.0 開始,RDD-based API 已經進入維護模式,不再增加新的功能,並期望在 Spark 3.0 中移除。而 DataFrame-based API 成為 Spark 中的機器學習的主要 API。主要原因有以下幾點:
-
DataFrames 提供比 RDDs 更加用戶友好的 API,好處包括支持多種 Spark 數據源,SQL/DataFrame 查詢,Tungsten 和 Catalyst 優化以及跨語言的統一 API;
-
DataFrame-based API 為 MLlib 提供了統一的跨多種 ML 算法和多種語言的 API;
-
DataFrames 有助於實用的 ML 管道,特別是功能轉換。
使用 ML Pipeline API 可以很方便的把數據處理,特征轉換,正則化,以及多個機器學習算法聯合起來,構建一個單一完整的機器學習流水線。這種方式給我們提供了更靈活的方法,更符合機器學習過程的特點,也更容易從其他語言遷移。
機器學習工具
示例(邏輯回歸)
邏輯回歸是預測分類結果的常用方法。廣義線性模型的一個特例是預測結果的概率。在 spark.ml 中,邏輯回歸可以用 binomial logistic regression
來預測二元結果,或者使用 multinomial logistic regression
來預測多類結果。使用 family
參數在這兩個算法之間進行選擇,或者保持不設置,Spark 將推斷出正確的變量。
from pyspark.ml.classification import LogisticRegression
# Load training data
training = spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
lr = LogisticRegression(maxIter=10, regParam=0.3, elasticNetParam=0.8)
# Fit the model
lrModel = lr.fit(training)
# Print the coefficients and intercept for logistic regression
print("Coefficients:" + str(lrModel.coefficients))
print("Intercept:" + str(lrModel.intercept))
# We can also use the multinomial family for binary classification
mlr = LogisticRegression(maxIter=10, regParam=0.3, elasticNetParam=0.8, family="multinomial")
# Fit the model
mlrModel = mlr.fit(training)
# Print the coefficients and intercepts for logistic regression with multinomial family
print("Multinomial coefficients:" + str(mlrModel.coefficientMatrix))
print("Multinomial intercepts:" + str(mlrModel.interceptVector))
其中,libsvm
為一種數據格式,具體形式可以參考:libsvm。regParam
定義了正則化項的權重參數,elasticNetParam
表示選擇的正則化項。假設定義的正則化項如下:
則 regParam
參數正是對應了參數 \(\lambda\),而 elasticNetParam
則是對應了參數 \(\alpha\),則有如下情況:
- 當 \(\alpha=0\) 時,懲罰項為 L2 正則,默認情況;
- 當 \(\alpha=1\) 時,懲罰項為 L1 正則;
- 當 \(0<\alpha<1\) 時,懲罰項為 L1 正則和 L2 正則的混合;
L1 和 L2 正則的主要目的是解決模型的過擬合問題,具體的形式為: