Spark 中的機器學習庫及示例

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

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

DataFrame-based API

從 Spark 2.0 開始,RDD-based API 已經進入維護模式,再也不增長新的功能,並指望在 Spark 3.0 中移除。而 DataFrame-based API 成爲 Spark 中的機器學習的主要 API。主要緣由有如下幾點:python

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

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

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

使用 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\),則有以下狀況:spa

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

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

uploading-image-517376.png

相關文章
相關標籤/搜索