ラッソ回帰とは
ラッソ回帰(Least Absolute Shrinkage and Selection Operator Regression)は、線形回帰モデルであり、正則化を導入してモデルのパフォーマンスと解釈性を改善します。ラッソ回帰の主な目的は、コスト関数にL1ペナルティ項を追加することで、モデルの複雑性を最小限に抑え、特徴量の選択と過剰適合を防止することです。
正則化の必要性
機械学習では、モデルがトレーニングデータのノイズを学習し、未知のデータでパフォーマンスが低下する過剰適合が発生することがあります。正則化は、コスト関数にペナルティ項を追加することで、この問題に対処するための技術です。これにより、モデルはもっとも関連性の高い特徴量に焦点を当て、ノイズにフィットすることを避けるように強制されます。
正則化手法は大きくL1正則化とL2正則化の2つのカテゴリに分類されます。ラッソ回帰はL1正則化を使用し、いくつかの係数をゼロに設定してスパースなモデルを生成します。このラッソ回帰の性質は、特に多数の特徴を扱う場合に、特徴量選択の理想的な候補となります。
ラッソ回帰の数学的基礎
コスト関数
線形回帰では、コスト関数(または目的関数)は、予測値と実際値の間の差を測定するために使用されます。最適な係数を得るために、このコスト関数を最小化することが目的です。線形回帰のコスト関数は、平均二乗誤差(MSE)で与えられます。
ここで、
L1ペナルティ項
ラッソ回帰では、正則化を導入するためにコスト関数にL1ペナルティ項が追加されます。L1ペナルティ項は次のようになります。
ここで、
ラグランジュ乗数
L1ペナルティ項をコスト関数に組み込むことにより、ラッソ回帰の目的関数を得ます。
ラグランジュ乗数
解の経路とラッソ制約
ラッソ回帰の重要な側面は、係数推定値が正則化パラメータ
ラッソ制約は、原点を中心とする
Pythonでのラッソ回帰の実装
この章では、California Housingデータセットを使用してラッソ回帰を実装し、正則化パラメータが増加するにつれて係数の遷移を可視化します。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import ラッソ
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Load the California Housing dataset
data = fetch_california_housing()
X = data['data']
y = data['target']
feature_names = data['feature_names']
# Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Standardize the data
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Set the range of regularization parameter values
lambdas = np.logspace(-4, 1, 100)
# Store the coefficients for each lambda value
coefficients = []
# Fit ラッソ Regression for each lambda value and store the coefficients
for lmbda in lambdas:
ラッソ = ラッソ(alpha=lmbda, max_iter=10000)
ラッソ.fit(X_train_scaled, y_train)
coefficients.append(ラッソ.coef_)
# Plot the transition of coefficients using Matplotlib and Seaborn
plt.figure(figsize=(12, 8))
sns.set(style='whitegrid', palette='muted')
# Customize plot appearance
for i, feature in enumerate(feature_names):
sns.lineplot(x=lambdas, y=np.array(coefficients)[:, i], label=feature)
plt.xscale('log')
plt.xlabel('Regularization Parameter (λ)', fontsize=14)
plt.ylabel('Coefficient Values', fontsize=14)
plt.title('Transition of Coefficients in ラッソ Regression', fontsize=16, fontweight='bold')
plt.legend(fontsize=12, loc='upper right')
# Display the plot
plt.show()
このスクリプトでは、California Housingデータセットを読み込み、トレーニングセットとテストセットに分割し、特徴量を標準化します。その後、一連の正則化パラメータ値(
最後に、MatplotlibとSeabornを使用して、正則化パラメータが増加するにつれて係数の遷移を視覚的に示す魅力的なプロットを作成します。このプロットは、ラッソ回帰の係数に与える影響を示し、