Spark 中的機器學習庫及示例


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

  1. 機器學習算法:常用的學習算法,如分類、回歸、聚類和協同過濾;
  2. 特征化工具:特征提取、轉化、降維和特征選擇等工具;
  3. 管道:由於構建、評估和調整機器學習管道的工具;
  4. 持久性:保存和加載算法,模型和管道;
  5. 實用工具:線性代數,統計和數據處理等工具。

DataFrame-based API

從 Spark 2.0 開始,RDD-based API 已經進入維護模式,不再增加新的功能,並期望在 Spark 3.0 中移除。而 DataFrame-based API 成為 Spark 中的機器學習的主要 API。主要原因有以下幾點:

  1. DataFrames 提供比 RDDs 更加用戶友好的 API,好處包括支持多種 Spark 數據源,SQL/DataFrame 查詢,Tungsten 和 Catalyst 優化以及跨語言的統一 API;

  2. DataFrame-based API 為 MLlib 提供了統一的跨多種 ML 算法和多種語言的 API;

  3. DataFrames 有助於實用的 ML 管道,特別是功能轉換。

使用 ML Pipeline API 可以很方便的把數據處理,特征轉換,正則化,以及多個機器學習算法聯合起來,構建一個單一完整的機器學習流水線。這種方式給我們提供了更靈活的方法,更符合機器學習過程的特點,也更容易從其他語言遷移。

機器學習工具

  1. 基本統計
  2. 加載數據源
  3. 管道
  4. 提取,轉換和選擇特征
  5. 分類和回歸
  6. 聚類
  7. 協同過濾
  8. 頻繁模式挖掘
  9. 模型選擇和超參數調整
  10. 模型優化

示例(邏輯回歸)

邏輯回歸是預測分類結果的常用方法。廣義線性模型的一個特例是預測結果的概率。在 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 為一種數據格式,具體形式可以參考:libsvmregParam 定義了正則化項的權重參數,elasticNetParam 表示選擇的正則化項。假設定義的正則化項如下:

\[L(w)=\lambda(\alpha L_1(w)+(1-\alpha)L_2(w))\tag{1} \]

regParam 參數正是對應了參數 \(\lambda\),而 elasticNetParam 則是對應了參數 \(\alpha\),則有如下情況:

  • \(\alpha=0\) 時,懲罰項為 L2 正則,默認情況;
  • \(\alpha=1\) 時,懲罰項為 L1 正則;
  • \(0<\alpha<1\) 時,懲罰項為 L1 正則和 L2 正則的混合;

L1 和 L2 正則的主要目的是解決模型的過擬合問題,具體的形式為:

uploading-image-517376.png


免責聲明!

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



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