Python 中的 Lasso 迴歸

Manav Narula 2023年1月30日
  1. Python 中的 Lasso 迴歸
  2. 在 Python 中實現 Lasso 迴歸
Python 中的 Lasso 迴歸

迴歸是一種統計技術,可確定因變數和自變數之間的關係。我們可以使用迴歸作為機器學習模型在 Python 中進行預測分析。

線性迴歸和邏輯迴歸是最常見的迴歸技術。它已經發展,現在已經引入了改進的迴歸版本。

該技術的準確性可能存在一些問題。

已經討論並證明了傳統的迴歸技術在自變數數量增加時會導致過度擬合的問題,同時增加多項式的次數。

過度擬合的另一個重要因素是嘈雜和不一致的資料,導致結果不準確。

引入正則化來解決這個問題。Lasso 迴歸就是這樣一種技術,它在預測分析中使用正則化和變數選擇。

Python 中的 Lasso 迴歸

Lasso 迴歸有助於處理資料集中具有更多不相關特徵的情況。我們需要將這些特徵的係數降低到最低限度,以消除它們對預測的影響。

Lasso 迴歸在成本函式中引入了一個稱為 L1 懲罰的值。在梯度優化過程中,不相關特徵的權重通過 L1 懲罰降低到最小值(幾乎為 0)。

函式中不考慮這些縮小的權重以消除它們的相關性。

Lasso 迴歸的數學方程

Lasso 迴歸的數學方程如上圖所示。這裡,λ的值是決定收縮量的收縮引數。

更高的值意味著更多的偏差和更少的方差。對於λ = 0,所有特徵都被認為是等價的,無窮大的值決定不考慮任何特徵。

用引數誘導 L1 懲罰的主要概念是在引數值增加時降低特徵的權重。

在 Python 中實現 Lasso 迴歸

我們使用 sklearn.linear_model.Lasso 類在 Python 中實現 Lasso 迴歸。我們可以使用這個類建立一個模型,並將它與所需的訓練和測試資料一起使用來進行預測。

它採用引數 alpha,即乘以 L1 懲罰的常數值。該物件還接受其他引數,如 fit_interceptnormalizeprecomputecopy_X 等。

讓我們用 Python 實現一個 Lasso 迴歸的例子。

from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn import datasets

data = datasets.load_boston()
x_data = data.data
y_data = data.target

train_x, test_x, train_y, test_y = train_test_split(
    x_data, y_data, test_size=0.3, random_state=42
)

lasso = Lasso(alpha=1.0)
lasso.fit(train_x, train_y)
print(lasso.score(test_x, test_y) * 100)

輸出:

65.59060829154339

在上面的示例中,我們從 sklearn 模組載入了一個樣本資料集,並將其拆分為 x_datay_data。我們使用 train_test_split 類將資料集分為訓練資料集和測試資料集。

我們使用訓練資料集使用 fit() 函式訓練 Lasso 迴歸模型。然後,我們使用 score() 函式檢查預測資料的分數。

輸出顯示該模型以 65.59% 的準確率預測資料。

我們可以執行交叉驗證來找到 Lasso 模型的 alpha 引數的最佳值。

我們可以匯入 sklearn.linear_model.LassoCV 類。然後,我們可以指定交叉驗證技術中的摺疊數。

請參閱下面的程式碼。

from sklearn.linear_model import LassoCV
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn import datasets

data = datasets.load_boston()
x_data = data.data
y_data = data.target

train_x, test_x, train_y, test_y = train_test_split(
    x_data, y_data, test_size=0.3, random_state=42
)


lassocv = LassoCV(cv=5, random_state=0, max_iter=10000)
lassocv.fit(train_x, train_y)
al = lassocv.alpha_
print(al)

lasso = Lasso(alpha=al)
lasso.fit(train_x, train_y)
print(lasso.score(test_x, test_y) * 100)

輸出:

0.7051444556162024
67.48582731460068

在上面的例子中,我們找到了 alpha 值的最佳值,然後用這個值來訓練和測試之前的模型。新 alpha 值的模型準確率為 67.48%。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相關文章 - Python Math