Python でのなげなわ回帰 (ステップバイステップ)
ラッソ回帰は、データに多重共線性が存在する場合に回帰モデルを近似するために使用できる方法です。
簡単に言うと、最小二乗回帰は、残差二乗和 (RSS) を最小化する係数推定値を見つけようとします。
RSS = Σ(y i – ŷ i )2
金:
- Σ : 和を意味するギリシャ語の記号
- y i : i 番目の観測値の実際の応答値
- ŷ i : 重回帰モデルに基づく予測応答値
逆に、なげなわ回帰では、以下を最小限に抑えようとします。
RSS + λΣ|β j |
ここで、 jは 1 からp 個の予測子変数であり、λ ≥ 0 です。
方程式のこの 2 番目の項は、撤退ペナルティとして知られています。ラッソ回帰では、可能な限り最小の MSE (平均二乗誤差) テストを生成する λ の値を選択します。
このチュートリアルでは、Python でなげなわ回帰を実行する方法の段階的な例を示します。
ステップ 1: 必要なパッケージをインポートする
まず、Python でなげなわ回帰を実行するために必要なパッケージをインポートします。
import pandas as pd
from numpy import arange
from sklearn. linear_model import LassoCV
from sklearn. model_selection import RepeatedKFold
ステップ 2: データをロードする
この例では、33 台の異なる車に関する情報が含まれるmtcarsというデータセットを使用します。応答変数としてhp を使用し、予測変数として次の変数を使用します。
- mpg
- 重さ
- たわごと
- qsec
次のコードは、このデータセットをロードして表示する方法を示しています。
#define URL where data is located
url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/mtcars.csv"
#read in data
data_full = pd. read_csv (url)
#select subset of data
data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]
#view first six rows of data
data[0:6]
mpg wt drat qsec hp
0 21.0 2.620 3.90 16.46 110
1 21.0 2.875 3.90 17.02 110
2 22.8 2.320 3.85 18.61 93
3 21.4 3.215 3.08 19.44 110
4 18.7 3,440 3.15 17.02 175
5 18.1 3.460 2.76 20.22 105
ステップ 3: なげなわ回帰モデルを当てはめる
次に、sklearn のLassoCV()関数を使用してラッソ回帰モデルを適合し、 RepeatedKFold()関数を使用して k 分割交差検証を実行し、ペナルティ項に使用する最適なアルファ値を見つけます。
注: Python では「ラムダ」の代わりに「アルファ」という用語が使用されます。
この例では、k = 10 分割を選択し、相互検証プロセスを 3 回繰り返します。
また、LassoCV() はデフォルトでアルファ値 0、1、1、10 のみをテストすることに注意してください。ただし、独自のアルファ範囲を 0 から 1 まで 0.01 刻みで設定できます。
#define predictor and response variables X = data[["mpg", "wt", "drat", "qsec"]] y = data["hp"] #define cross-validation method to evaluate model cv = RepeatedKFold(n_splits= 10 , n_repeats= 3 , random_state= 1 ) #define model model = LassoCV(alphas= arange (0, 1, 0.01), cv=cv, n_jobs= -1 ) #fit model model. fit (x,y) #display lambda that produced the lowest test MSE print( model.alpha_ ) 0.99
テストの MSE を最小化するラムダ値は0.99であることがわかります。
ステップ 4: モデルを使用して予測を行う
最後に、最後のなげなわ回帰モデルを使用して、新しい観測値についての予測を行うことができます。たとえば、次のコードは、次の属性を持つ新しい車を定義する方法を示しています。
- mpg: 24
- 重量: 2.5
- 価格: 3.5
- qsec: 18.5
次のコードは、適合したなげなわ回帰モデルを使用して、この新しい観測値のhp値を予測する方法を示しています。
#define new observation
new = [24, 2.5, 3.5, 18.5]
#predict hp value using lasso regression model
model. predict ([new])
array([105.63442071])
入力された値に基づいて、モデルはこの車の馬力値が105.63442071になると予測します。
この例で使用されている完全な Python コードは、 ここで見つけることができます。