資料集我們使用的是 sklearn包中自帶的波士頓房價資料集。
乙個簡單的 lasso 回歸實驗還是那六個步驟:
載入資料集
拆分資料集
建立模型
在訓練集學習得到模型
模型**
模型評測
關於訓練集和測試集的劃分我們使用的是留出法。至於引數設定,我們設定隨機種子為10,學習率為0.1,迭代次數為10000。
最後的結果我們使用四項指標來進行評估:
**如下:
可以看到,得到的指標為:平均絕對誤差mae為4.23,r2得分為0.64# lasso回歸,boston資料集
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import lasso
from sklearn.metrics import mean_absolute_error, r2_score
# 載入資料集
boston_data = load_boston(
)x = boston_data.data
y = boston_data.target
# 拆分資料集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=
0.2, random_state=10)
# 例項化lasso模型
lasso = lasso(alpha=
0.1, max_iter=
10000
)# 訓練模型
lasso.fit(x_train, y_train)
# 輸出權重係數
("coef:"
, lasso.coef_)
# 輸出截距
("intercept:"
, lasso.intercept_)
# 模型**
lasso_predict = lasso.predict(x_test)
# 模型評估
("mae: "
, mean_absolute_error(y_test, lasso_predict)
("r2-score: "
, r2_score(y_test, lasso_predict)
)
我們發現 r2得分確實有點低,只有 0.64。於是我們採用隨機引數搜尋的方式進行優化。
劃分時隨機種子設定為100。給超引數設定範圍,採用隨機引數選擇的方式,10折交叉驗證,迭代次數為100,來獲得模型的最佳引數。
用最佳引數重新生成模型,再訓練模型進行**。
如果想要弄明白隨機搜尋的引數具體怎麼設定,可以參考這一篇部落格 sklearn——引數優化**如下:
可以看到,優化後的模型明顯好於之前,平均絕對誤差mae為3.25,r2得分為0.76# lasso回歸,boston資料集
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.model_selection import randomizedsearchcv
from sklearn.linear_model import lasso
from sklearn.metrics import mean_absolute_error, r2_score
import numpy as np
# 載入資料集
boston_data = load_boston(
)x = boston_data.data
y = boston_data.target
# 拆分資料集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=
0.2, random_state=
100)
# 設定超引數
alpha =
[0.01
,0.005
,0.001
,0.0005
,0.0001
,0.02
,0.05
,0.1
,0.2
,0.5,1
]max_iter =
[int
(x)for x in np.linspace(start=
1000
, stop=
10000
, num=
1000)]
random_state =
[int
(x)for x in np.linspace(start=
10, stop=
300, num=10)
]# 引數字典
params_dict =
# 例項化lasso模型
lasso = lasso(
)# 隨機引數選擇
rscv = randomizedsearchcv(
estimator=lasso,
param_distributions=params_dict,
n_iter=
100,
scoring=
'r2'
, cv=10)
rscv.fit(x_train, y_train)
# 輸出引數資訊
("最佳度量值:"
, rscv.best_score_)
("最佳引數:"
, rscv.best_params_)
("最佳模型:"
, rscv.best_estimator_)
# 用最佳引數生成模型
lasso = lasso(alpha=rscv.best_params_[
'alpha'
], max_iter=rscv.best_params_[
'max_iter'],
random_state=rscv.best_params_[
'random_state'])
# 訓練模型
lasso.fit(x_train, y_train)
# 模型**
lasso_predict = lasso.predict(x_test)
# 模型評估
("mae: "
, mean_absolute_error(y_test, lasso_predict)
("r2-score: "
, r2_score(y_test, lasso_predict)
)
lasso回歸 LASSO回歸求解
很感謝網上的優質部落格,正是因為有了這些知識的分享,才讓學習的成本越來越低。我們假定有 lasso回歸訓練出來的係數是稀疏的,可用於做特徵篩選。但是怎麼訓練呢,因為絕對值函式在 處是不可導的,所以直接採用梯度下降法是行不通的,需要利用別的演算法。梯度是乙個函式增長最快的方向,但是當函式在某點不可導時...
嶺回歸 lasso回歸
嶺回歸 ridge regression 和lasso least absolute shrinkage and selection operator 都是ols的改進,知乎上有關於三者異同的詳細討論 關於lasso 這裡記錄一下最近的學習心得。嶺回歸的含義 嶺回歸的權值計算公式中有單位方陣i,就像...
R 嶺回歸 lasso回歸
1.嶺回歸 嶺回歸 ridge regression,tikhonov regularization 實際上算是最小二乘法 ols 的改良版。最小二乘法中使用的是無偏估計回歸,而嶺回歸使用的是 有偏估計回歸 通過損失部分資訊 減低精度得到的回歸係數,但是這樣跟符合實際情況。因為ols有四個基本假設 ...