L1、L2-正則化

出現過擬合時,使用正則化可以將模型的擬合程度降低一點點,使曲線變得緩和。

L1正則化(LASSO)

正則項是所有參數的絕對值的和。正則化不包含theta0,因爲他只是偏置,而不影響曲線的擺動幅度。
J(θ)=MSE(y,y^)+αi=1nθi J(\theta)=\operatorname{MSE}(y, \hat{y})+\alpha \sum_{i=1}^{n}\left|\theta_{i}\right|

# 使用pipeline進行封裝
from sklearn.linear_model import Lasso
# 使用管道封裝lasso
def LassoRegssion(degree, alpha):
    return Pipeline([
        ("poly", PolynomialFeatures(degree = degree)),
        ("std_scaler", StandardScaler()),
        ("lasso", Lasso(alpha=alpha))
    ])

使用α=0.01\alpha=0.01 的正則化擬合20階多項式

lasso_reg = LassoRegssion(20, 0.01)
lasso_reg.fit(X_train, y_train)
y_predict = lasso_reg.predict(X_test)

plot_model(lasso_reg)

MSE 1.149608084325997

α=0.1\alpha=0.1

MSE 1.1213911351818648

α=1\alpha=1 時,均方誤差又變大了,正則化過度了。模型變成了直線,所有參數都接近0了。因爲沒有對θ0\theta_0進行正則化,所以偏置的值沒有變化

1.8408939659515595

L2正則化(嶺迴歸)

1/2可加可不加,因爲方便求導。對J()求最小值時,也將θ\theta的值變小。當α\alpha越大,右邊受到的影響就越大,θ\theta的值就越小
J(θ)=MSE(y,y^)+α12i=1nθi2 J(\theta)=\operatorname{MSE}(y, \hat{y})+\alpha \frac{1}{2} \sum_{i=1}^{n} \theta_{i}^{2}

使用pipeline封裝Ridge

from sklearn.linear_model import Ridge
# 使用管道封裝嶺迴歸
def RidgeRegression(degree, alpha):
    return Pipeline([
        ("poly", PolynomialFeatures(degree = degree)),
        ("std_scaler", StandardScaler()),
        ("ridge_reg", Ridge(alpha = alpha))
    ])

使用20階多項式擬合,α=0\alpha=0即沒有正則化。

ridge_reg100 = RidgeRegression(20, 0)
ridge_reg100.fit(X_train, y_train)
y_predict = ridge_reg100.predict(X_test)
plot_model(ridge_reg100)

# MSE 167.94010860994555

α=0.0001\alpha=0.0001

ridge_reg100 = RidgeRegression(20, 0.0001)

# MSE 1.3233492754136291

α=10\alpha=10

ridge_reg100 = RidgeRegression(20, 10)

# MSE 1.1451272194878865

α=1000\alpha=1000

ridge_reg100 = RidgeRegression(20, 10000)

# MSE 1.7967435583384

對比

  • LASSO更趨向於將一部分參數變爲0,更容易得到直線。Ridge更容易得到曲線。
  • α\alpha越大,正則化的效果越明顯

兩個正則化的不同僅僅在於正則化項的不同:
J(θ)=MSE(y,y^)+αi=1nθi J(\theta)=\operatorname{MSE}(y, \hat{y})+\alpha \sum_{i=1}^{n}\left|\theta_{i}\right|
J(θ)=MSE(y,y^)+α12i=1nθi2 J(\theta)=\operatorname{MSE}(y, \hat{y})+\alpha \frac{1}{2} \sum_{i=1}^{n} \theta_{i}^{2}

常見的對比還有:

MSE 和 MAE :

MSE==>1ni=1n(yiy^i)2 MSE ==> \frac{1}{n} \sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}
MAE==>1ni=1nyiy^i MAE ==> \frac{1}{n} \sum_{i=1}^{n}\left|y_{i}-\hat{y}_{i}\right|

歐拉距離和曼哈頓距離:

i=1n(xi(1)xi(2))2i=1nxi(1)xi(2) \sqrt{\sum_{i=1}^{n}\left(x_{i}^{(1)}-x_{i}^{(2)}\right)^{2}} 和 \sum_{i=1}^{n}\left|x_{i}^{(1)}-x_{i}^{(2)}\right|

還有明可夫斯基距離:
[i=1nXi(a)Xi(b)p]1p \left[\sum_{i=1}^{n}\left|X_{i}^{(a)}-X_{i}^{(b)}\right|^{p}\right]^{\frac{1}{p}}

彈性網(待定)

就是將兩個範式進行結合。
J(θ)=MSE(y,y^)+rαi=1nθi+1r2αi=1nθi2 J(\theta)=\operatorname{MSE}(y, \hat{y})+r \alpha \sum_{i=1}^{n}\left|\theta_{i}\right|+\frac{1-r}{2} \alpha \sum_{i=1}^{n} \theta_{i}^{2}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章