【機器學習】--線性回歸中L1正則和L2正則


一、前述

L1正則,L2正則的出現原因是為了推廣模型的泛化能力。相當於一個懲罰系數。

二、原理

L1正則:Lasso Regression

 

L2正則:Ridge Regression

總結:

經驗值 MSE前系數為1 ,L1 , L2正則前面系數一般為0.4~0.5 更看重的是准確性。

L2正則會整體的把w變小。

L1正則會傾向於使得w要么取1,要么取0 ,稀疏矩陣 ,可以達到降維的角度。

ElasticNet函數(把L1正則和L2正則聯合一起):

總結:

1.默認情況下選用L2正則。

2.如若認為少數特征有用,可以用L1正則。

3.如若認為少數特征有用,但特征數大於樣本數,則選擇ElasticNet函數。

 代碼一:L1正則

# L1正則
import numpy as np
from sklearn.linear_model import Lasso
from sklearn.linear_model import SGDRegressor


X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

lasso_reg = Lasso(alpha=0.15)
lasso_reg.fit(X, y)
print(lasso_reg.predict(1.5))

sgd_reg = SGDRegressor(penalty='l1')
sgd_reg.fit(X, y.ravel())
print(sgd_reg.predict(1.5))

代碼二:L2正則

# L2正則
import numpy as np
from sklearn.linear_model import Ridge
from sklearn.linear_model import SGDRegressor



X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

#兩種方式第一種嶺回歸
ridge_reg = Ridge(alpha=1, solver='auto')
ridge_reg.fit(X, y)
print(ridge_reg.predict(1.5))#預測1.5的值
#第二種 使用隨機梯度下降中L2正則
sgd_reg = SGDRegressor(penalty='l2')
sgd_reg.fit(X, y.ravel())
print(sgd_reg.predict(1.5))

代碼三:Elastic_Net函數

 

 

# elastic_net函數
import numpy as np
from sklearn.linear_model import ElasticNet
from sklearn.linear_model import SGDRegressor


X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
#兩種方式實現Elastic_net
elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5)
elastic_net.fit(X, y)
print(elastic_net.predict(1.5))

sgd_reg = SGDRegressor(penalty='elasticnet')
sgd_reg.fit(X, y.ravel())
print(sgd_reg.predict(1.5))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM