Lasso回歸實驗

2021-10-06 09:40:28 字數 3720 閱讀 4353

資料集我們使用的是 sklearn包中自帶的波士頓房價資料集。

乙個簡單的 lasso 回歸實驗還是那六個步驟:

載入資料集

拆分資料集

建立模型

在訓練集學習得到模型

模型**

模型評測

關於訓練集和測試集的劃分我們使用的是留出法。至於引數設定,我們設定隨機種子為10,學習率為0.1,迭代次數為10000。

最後的結果我們使用四項指標來進行評估:

**如下:

# 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)

# 輸出權重係數

print

("coef:"

, lasso.coef_)

# 輸出截距

print

("intercept:"

, lasso.intercept_)

# 模型**

lasso_predict = lasso.predict(x_test)

# 模型評估

print

("mae: "

, mean_absolute_error(y_test, lasso_predict)

)print

("r2-score: "

, r2_score(y_test, lasso_predict)

)

可以看到,得到的指標為:平均絕對誤差mae為4.23,r2得分為0.64

我們發現 r2得分確實有點低,只有 0.64。於是我們採用隨機引數搜尋的方式進行優化。

劃分時隨機種子設定為100。給超引數設定範圍,採用隨機引數選擇的方式,10折交叉驗證,迭代次數為100,來獲得模型的最佳引數。

用最佳引數重新生成模型,再訓練模型進行**。

如果想要弄明白隨機搜尋的引數具體怎麼設定,可以參考這一篇部落格 sklearn——引數優化

**如下:

# 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)

# 輸出引數資訊

print

("最佳度量值:"

, rscv.best_score_)

print

("最佳引數:"

, rscv.best_params_)

print

("最佳模型:"

, 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)

# 模型評估

print

("mae: "

, mean_absolute_error(y_test, lasso_predict)

)print

("r2-score: "

, r2_score(y_test, lasso_predict)

)

可以看到,優化後的模型明顯好於之前,平均絕對誤差mae為3.25,r2得分為0.76

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有四個基本假設 ...