spark Ml 機器學習之 線性回歸

2021-08-14 17:14:37 字數 3684 閱讀 9254

本文版本選自spark 2.1.0

寫這篇文章之前已閱讀過官網api,演算法本身自認為自己手動寫,應該可以搞定(進一步優化不提);但是官網卻看的我迷迷糊糊的,引數選擇和結果獲取,描述不夠清晰,寫這篇文字的目的就是為了理清所有官網沒有解答的謎團;

演算法本身比較簡單,網上文章也很多,本人自身也提不出更高大上的解決方案,所以演算法不再詳解;重點就是解讀官網的不足;

上**:

val training = spark.read.format("libsvm")

.load(pathfile+"data/mllib/linearregression.txt")

val lr = new linearregression()

.setmaxiter(10)

.setregparam(0)

.setelasticnetparam(0)

解讀:關於setelasticnetparam的原始碼描述有:

* this supports multiple types of regularization:

* - none (a.k.a. ordinary least squares)

* - l2 (ridge regression)

* - l1 (lasso)

* - l2 + l1 (elastic net)

意思就是說:這支援多種型別的正則化操作。

具體方法描述為:

/**

* set the elasticnet mixing parameter.

* for alpha = 0, the penalty is an l2 penalty.

* for alpha = 1, it is an l1 penalty.

* for alpha in (0,1), the penalty is a combination of l1 and l2.

* default is 0.0 which is an l2 penalty.**

@group

setparam

*/@since("1.4.0")

defsetelasticnetparam(value: double):this.type= set(elasticnetparam, value)

setdefault(elasticnetparam -> 0.0)

可以發現這個引數設定是用來設定l1,、l2的。

l1與l2規範是用來幹嘛的呢?簡單來說是為了處理過擬合的(後面有具體測試),下圖是乙個形象描述;

l1正則化和l2正則化可以看做是損失函式的懲罰項。對於線性回歸模型,使用l1正則化的模型建叫做lasso回歸,使用l2正則化的模型叫做ridge回歸(嶺回歸)。下圖是

python

中lasso回歸的損失函式,式中加號後面一項α||w||1

即為l1正則化項。

下圖是python中ridge回歸的損失函式,式中加號後面一項α||w||22即為l2正則化項。

結合setregparam(),該函式為設定正則化引數,結合以上描述

推測spark ml的線性規劃完整函式為:min(1/2n||coefficients*x -y||^2^ +(elasticnetparam*l1-(1-elasticnetparam)*l2))

也就是說:正則化引數設定為0時,elasticnetparam的設定無意義。

下面繼續**驗證,及其測試結果

val lrmodel = lr.fit(training)

//y=w*x+b 回歸係數(w) and 截距(b)

println(s"coefficients: $ intercept: $")

//總結訓練集上的模型並列印出一些指標

val trainingsummary = lrmodel.summary

println(s"numiterations: $")

println(s"objectivehistory: [$]")

trainingsummary.residuals.show()//殘差

println(s"rmse: $")//均方根誤差

println(s"r2: $")//判定係數,也稱為擬合優度,越接近1越好

測試資料為:【

選擇最直觀的資料,不裝逼】,引數如上文所示

1 1:0

2 1:1

3 1:2

4 1:3

5 1:4

結果為:

coefficients: [0.9999999999999993] intercept: 1.000000000000001

numiterations: 1

objectivehistory: [0.0]

測試資料為:正則化引數設定為0.1
1 1:0.2

2 1:1.1

3 1:2.1

4 1:2.9

5 1:4

結果為:

coefficients: [1.0619069136918209] intercept: 0.8124717577948491

numiterations: 1

objectivehistory: [0.0]

正則化引數設定為:0.1,

elasticnetparam為0.2

結果為:

coefficients: [0.9908261029681737] intercept: 0.9588982278855623

numiterations: 3

objectivehistory: [0.5,0.4037043811427782,0.040903518280319406]

正則化引數設定為:0.1,

elasticnetparam為0.8

結果為:

coefficients: [0.9878122500298612] intercept: 0.9651067649384861

numiterations: 3

objectivehistory: [0.5,0.4116133463948107,0.06201518671563113]

根據結果分析公式

min(1/2n||coefficients*x -y||^2^ +(

elasticnetparam*l1

-(1-

elasticnetparam

)*l2

)),結論不坑

複雜的沒有測試,歡迎批評指正

機器學習之線性回歸以及Logistic回歸

1 線性回歸 回歸的目的是 數值型資料的目標值。目標值的計算是通過乙個線性方程得到的,這個方程稱為回歸方程,各未知量 特徵 前的係數為回歸係數,求這些係數的過程就是回歸。對於普通線性回歸使用的損失函式一般為平方誤差。把其用最小二乘法進行優化得到的關於係數w求導所得到的矩陣形式的表示式求得的 w便為最...

機器學習之線性回歸

訓練樣例 x y 輸入變數 特徵 x ps n 1行,1 列 輸出變數 目標變數 y訓練樣例總數 m 特徵維度 n第 i 個訓練樣例 x i y i 所有訓練樣例的輸入變數組成的矩陣 x ps m行,n 1 列,每行是 x i t 所有訓練樣例的輸出變數組成的矩陣 y ps m行,1 列 下表是某地...

機器學習之線性回歸

線性回歸就是用線性方程去擬合一組資料,x 的最高端是1,用方程可以表示為 h x 0 1x1 n xn我們令 x0 1則上式可以改寫為 h x i 0n ixi tx 既然是擬合的模型,則肯定會存在不符合該模型的點,第 i 個點的真實值與模型 的值之間的差稱為誤差 e h x i y i 假設總共有...