MLlib
是 Spark 的機器學習庫,旨在簡化機器學習的工程實踐工做,並方便擴展到更大規模。MLlib
由一些通用的學習算法和工具組成,包括分類、迴歸、聚類、協同過濾、降維等,同時還包括底層的優化原語和高層的管道 API。具體來講,主要包括如下幾方面的內容:html
從 Spark 2.0 開始,RDD-based API 已經進入維護模式,再也不增長新的功能,並指望在 Spark 3.0 中移除。而 DataFrame-based API 成爲 Spark 中的機器學習的主要 API。主要緣由有如下幾點:python
DataFrames 提供比 RDDs 更加用戶友好的 API,好處包括支持多種 Spark 數據源,SQL/DataFrame 查詢,Tungsten 和 Catalyst 優化以及跨語言的統一 API;算法
DataFrame-based API 爲 MLlib 提供了統一的跨多種 ML 算法和多種語言的 API;apache
DataFrames 有助於實用的 ML 管道,特別是功能轉換。api
使用 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
表示選擇的正則化項。假設定義的正則化項以下:學習
\[L(w)=\lambda(\alpha L_1(w)+(1-\alpha)L_2(w))\tag{1}\]優化
則 regParam
參數正是對應了參數 \(\lambda\),而 elasticNetParam
則是對應了參數 \(\alpha\),則有以下狀況:spa
L1 和 L2 正則的主要目的是解決模型的過擬合問題,具體的形式爲: