Python機器學習及實踐——進階篇4(模型正則化之L1正則&L2正則)

正則化的目的在於提高模型在未知測試數據上的泛化力,避免參數過擬合。由上一篇的例子可以看出,2次多項式迴歸是相對較好的模型假設。之所以出現如4次多項式那樣的過擬合情景,是由於4次方項對於的係數過大,或者不爲0導致。

因此正則化的常見方法都是在原模型優化目標的基礎上,增加對參數的懲罰項。以我們之前在線性迴歸器一節中介紹過的最小二乘優化目標爲例,如果加入對模型的L1範數正則化,那麼新的線性迴歸目標如下式所示:

也就是在原優化目標的基礎上,增加了參數向量的L1範數。這樣在新目標優化的過程中同時需要考量L1懲罰項的影響。爲了使目標最小化,這種正則化方法的結果會讓參數向量中許多元素趨向於0,使得大部分特徵失去對優化目標的貢獻。這種讓有效特徵變得稀疏的L1正則化模型,通常被稱爲Lasso。

接下來我們用下述代碼在上一篇例子的基礎上,繼續使用4次多項式特徵,但是換成Lasso模型檢驗L1範數正則化後的性能和參數。

# 從sklearn.linear_model中導入Lasso。
from sklearn.linear_model import Lasso

# 從使用默認配置初始化Lasso。
lasso_poly4 = Lasso()
# 從使用Lasso對4次多項式特徵進行擬合。
lasso_poly4.fit(X_train_poly4, y_train)

# 對Lasso模型在測試樣本上的迴歸性能進行評估。
print lasso_poly4.score(X_test_poly4, y_test)

0.83889268736

# 輸出Lasso模型的參數列表。
print lasso_poly4.coef_

[  0.00000000e+00   0.00000000e+00   1.17900534e-01   5.42646770e-05

-2.23027128e-04]

# 回顧普通4次多項式迴歸模型過擬合之後的性能。
print regressor_poly4.score(X_test_poly4, y_test)

0.809588079578

# 回顧普通4次多項式迴歸模型的參數列表。
print regressor_poly4.coef_

[[  0.00000000e+00  -2.51739583e+01   3.68906250e+00  -2.12760417e-01

    4.29687500e-03]

通過對代碼一系列輸出的觀察,驗證了我們所介紹的Lasso模型的特點:

  1. 相比於普通4次多項式迴歸模型在測試集上的表現,默認配置的Lasso模型性能提高了大約3%;
  2. 相較之下,Lasso模型擬合後的參數列表中,4次與3次特徵的參數均爲0.0,使得特徵更加稀疏。

 

L2範數正則化

與L1範數正則化略有不同的是,L2範數正則化則在原優化目標的基礎上,增加了參數向量的L2範數的懲罰項,如下述公式所示。爲了使新優化目標最小化,這種正則化方法的結果會讓參數向量中的大部分元素都變得很小,壓制了參數之間的差異性。這種正則化模型通常被稱爲Ridge。

我們同樣使用代碼,繼續對4次多項式特徵換成Ridge模型檢驗L2範數正則化後的性能和參數。

# 輸出普通4次多項式迴歸模型的參數列表。
print regressor_poly4.coef_

[[  0.00000000e+00  -2.51739583e+01   3.68906250e+00  -2.12760417e-01

    4.29687500e-03]]

# 輸出上述這些參數的平方和,驗證參數之間的巨大差異。
print np.sum(regressor_poly4.coef_ ** 2)

647.382645692

# 從sklearn.linear_model導入Ridge。
from sklearn.linear_model import Ridge
# 使用默認配置初始化Riedge。
ridge_poly4 = Ridge()

# 使用Ridge模型對4次多項式特徵進行擬合。
ridge_poly4.fit(X_train_poly4, y_train)

# 輸出Ridge模型在測試樣本上的迴歸性能。
print ridge_poly4.score(X_test_poly4, y_test)

0.837420175937

# 輸出Ridge模型的參數列表,觀察參數差異。
print ridge_poly4.coef_

[[ 0.         -0.00492536  0.12439632 -0.00046471 -0.00021205]]

# 計算Ridge模型擬合後參數的平方和。
print np.sum(ridge_poly4.coef_ ** 2)

0.0154989652036

通過對上述輸出的觀察,可以驗證Ridge模型的特點:

  1. 相比於普通4次多項式迴歸模型在測試集上的表現,默認配置的Ridge模型性能提高了近3%;
  2. 與普通4次多項式迴歸模型不同的是,Ridge模型擬合後的參數之間差異非常小。

這裏需要指出的是,上面兩個公式中的懲罰項,都有一個因子λ進行調節。儘管λ不屬於需要擬合的參數,卻在模型優化中扮演非常重要的角色。具體對λ的解讀,會留在後續。

 

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