機械学習の戦い: Ridge Ridge 回帰に基づく Python の正則化 (13)

1 はじめに

1.1 リッジ回帰の概要

リッジ回帰 (リッジ回帰) は、共線性問題のあるデータ セットを処理するために一般的に使用される線形回帰手法です通常の最小二乗線形回帰では、独立変数間に高度な相関がある場合、推定される回帰係数は不安定になるか、正確に推定することが不可能になることさえあります。リッジ回帰では、正則化項を導入することでこの問題を解決します。

リッジ回帰の重要なアイデアは、回帰係数にペナルティを与える最小二乗目的関数に L2 正則化項を追加することです。この正則化項は、調整パラメータを乗算した回帰係数の二乗和にペナルティを課すことによって実装されますalpha0 の場合alpha、リッジ回帰は通常の最小二乗回帰と同等であり、アルファが無限大に近づく傾向がある場合、回帰係数は 0 になる傾向があります。したがって、リッジ回帰では、値を制御することでalpha回帰係数のフィッティング能力と安定性のバランスをとります。

利点:

  • 共線性の問題を解決する: リッジ回帰は、回帰係数の推定に対する多重共線性の影響を効果的に軽減できます。相関性の高い独立変数が存在する場合、リッジ回帰により、より安定した信頼性の高い回帰係数の推定値が得られます。

  • 制御可能な正則化パラメータ: 正則化パラメータ alpha の値を調整することで、モデルの適合度と回帰係数の収縮度を制御できます。これにより、リッジ回帰には、特定の問題とデータに応じてモデルの複雑さと適合性のバランスをとる柔軟性が与えられます。

  • 高次元データに適しています: データセット内に多数の独立変数または特徴がある場合、リッジ回帰は回帰係数のより安定した推定値を提供できます。回帰係数のサイズを制御することで、ノイズや無関係な特徴に対する過剰適合を軽減し、モデルの汎化能力を向上させます。

短所:

  • バイアスの導入: リッジ回帰では、回帰係数にペナルティを課すことにより、特定のバイアスが導入される可能性があります。正則化項の存在により、回帰係数の推定が通常の最小二乗推定から逸脱し、情報がある程度失われる可能性があります。

  • 正則化パラメータを設定する必要があります。リッジ回帰のパフォーマンスは、正則化パラメータ アルファの影響を受けます。適切なアルファ値を選択するには、ある程度の経験またはパラメータ調整プロセスが必要です。アルファ値が大きすぎたり小さすぎたりすると、モデルのパフォーマンスの低下や過剰適合の問題が発生する可能性があります。

  • 特徴選択機能がない: ラッソ回帰と比較して、リッジ回帰には明示的な特徴選択機能がありません。一部の係数をゼロに縮小することなく、すべての独立変数に対して縮小を実行します。したがって、特徴の選択が必要な場合には、Lasso 回帰の方が適している可能性があります。

LASSO回帰とリッジ回帰を理解するための図

1.2 リッジ回帰の適用

  1. 経済と金融: リッジ回帰は、資産価格モデルの確立、経済指標の予測、金融市場における要因の影響の研究などに使用できます。金融分野では、リッジ回帰は、金融市場や資産価格に対する関連要因の影響を特定し、分析するのに役立ちます。

  2. 医学と生物学: リッジ回帰は、医学と生物学の分野のデータ分析と予測タスクに適用できます。たとえば、遺伝子発現解析では、リッジ回帰は、特定の疾患または生物学的プロセスに関連する遺伝子を特定し、遺伝子発現と関連する結果との関係を予測するのに役立ちます。

  3. 社会科学: リッジ回帰は、人口統計、社会経済学、心理学などの社会科学分野のデータ分析とモデリングに使用できます。人口統計上の特徴、社会経済的指標などと、特定の社会現象や行動との相関関係を研究するのに役立ちます。

  4. 工学と物理学: リッジ回帰は工学と物理学でも広く使用されています。たとえば、信号処理では、リッジ回帰を信号復元タスクやノイズ フィルタリング タスクに使用できます。材料科学では、リッジ回帰を使用して、材料特性とさまざまな特性パラメータの間の関係をモデル化できます。

  5. データ分析と予測: リッジ回帰は、多重共線性と高次元データの処理に利点があるため、データ分析と予測タスクで広く使用されています。リッジ回帰は、販売予測、市場分析、不動産評価などのさまざまなアプリケーション分野で、正確で安定した予測モデルを構築するのに役立ちます。

2. カスタム データセットの実践的なデモンストレーション

2.1 インポート機能

from sklearn.datasets import make_regression
from matplotlib import pyplot as plt
import numpy as np
from sklearn.linear_model import Ridge

2.2 データセットの作成

A, b, coefficients = make_regression(
    n_samples=50,
    n_features=1,
    n_informative=1,
    n_targets=1,
    noise=5,
    coef=True,
    random_state=1
)

2.3 alpha=0、1、10、100の場合

alpha が 0 に等しい場合、リッジ回帰は最小二乗 ( Ordinary Least SquaresOLS ) 回帰に退化します。リッジ回帰では、正則化項の係数は 0 であり、回帰係数に制約やペナルティは課されません。

alpha = 0
n, m = A.shape

I = np.identity(m)
w = np.dot(np.dot(np.linalg.inv(np.dot(A.T, A) + alpha * I), A.T), b)
plt.scatter(A, b)
plt.plot(A, w*A, c='red')

## w = array([89.22901347])

アルファ=1の場合:

rr = Ridge(alpha=1)
rr.fit(A, b)
w = rr.coef_
print(w)
## Output w = array([87.39928165])

plt.scatter(A, b)
plt.plot(A, w*A, c='red')

アルファ=10の場合:

rr = Ridge(alpha=10)
rr.fit(A, b)
w = rr.coef_
print(w)
## Output w = array([73.60064637])

plt.scatter(A, b)
plt.plot(A, w*A, c='red')

アルファ=100の場合:

rr = Ridge(alpha=100)
rr.fit(A, b)
w = rr.coef_
print(w)
## Output w = array([28.54061056])

plt.scatter(A, b)
plt.plot(A, w*A, c='red')

アルファ値が大きい場合、正則化項によって回帰係数に対するペナルティが増加し、回帰係数がゼロに近づくことを理解するのは難しくありません。回帰直線の傾きが 0 に近いということは、予測関数が入力フィーチャに与える影響が小さいことを意味するため、回帰直線はデータセット全体で平均が 0 になる平面として見ることができます。これにより、異なるデータセット間の差異が効果的に最小限に抑えられます。

アルファ値を増やすことにより、リッジ回帰モデルは全体としてトレーニング データの適合に重点を置き、特定のサンプルまたは外れ値での過剰適合を軽減します。これによりモデルの汎化能力が向上し、新しいデータに対する予測がより安定し、異なるデータセット間でのモデルの変動が減少します。

3. ドゥシャンベ_ハウスデータセットの実戦デモ

3.1 機能とデータのインポート

import io
import urllib3
import pandas as pd


http = urllib3.PoolManager()
r = http.request('GET', 'https://hands-on.cloud/wp-content/uploads/2022/04/Dushanbe_house.csv')
Dushanbe = pd.read_csv(io.StringIO(r.data.decode('utf-8')))

# 查看数据示例
Dushanbe.head()

3.2 null値の排除と可視化

# 删除空值
Dushanbe.dropna(axis=0, inplace=True)

# 如果存在空值,显示空值数量
Dushanbe.isnull().sum()
# 使用 plotly.express 导入模块
import plotly.express as px

# 绘制三维散点图
fig = px.scatter_3d(Dushanbe, x='number_of_rooms', y='area', z='price',
                    color='price')
fig.show()

3.3 データを整理する

# 提取数据集的列名
columns = Dushanbe.columns

# 存储输入和输出变量
Inputs = Dushanbe[columns[0:-1]]  # 输入变量
outputs = Dushanbe[columns[-1]]  # 输出变量

3.4 データセットのトレーニングとテスト

from sklearn.model_selection import train_test_split

# 导入模块
from sklearn.model_selection import train_test_split

# 拆分训练数据和测试数据
X_train, X_test, y_train, y_test = train_test_split(Inputs, outputs, test_size=0.3, random_state=42)

# 导入 Ridge 模型
from sklearn.linear_model import Ridge
# 设置 alpha 参数为 0.9 并初始化 Ridge 回归模型
model = Ridge(alpha=0.9)
# 使用训练数据拟合 Ridge 回归模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

3.5 評価データセット

from sklearn.metrics import r2_score
print('R-square score is:', r2_score(y_test, y_pred))
## R-square score is : 0.3787461308826928

import matplotlib.pyplot as plt
# 设置图形大小
plt.figure(figsize=(15, 8))
# 绘制实际值和预测值的图形
plt.plot([i for i in range(len(y_test))], y_test, label="实际值")
plt.plot([i for i in range(len(y_test))], y_pred, label="预测值")
# 添加图例
plt.legend()
# 显示绘图结果
plt.show()

さらに、モデルのパフォーマンスは、複数の行列評価メトリックを使用して評価できます。

 from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
# 计算均方误差(MSE)
mse = mean_squared_error(y_test, y_pred)
# 计算均方根误差(RMSE)
rmse = mean_squared_error(y_test, y_pred, squared=False)
# 计算决定系数(R^2)
r2 = r2_score(y_test, y_pred)
# 计算平均绝对误差(MAE)
mae = mean_absolute_error(y_test, y_pred)

# 打印评估结果
print("Mean Squared Error (MSE):", mse)
print("Root Mean Squared Error (RMSE):", rmse)
print("R-squared (R^2):", r2)
print("Mean Absolute Error (MAE):", mae)

## 结果
# Mean Squared Error (MSE): 138264386141.42395
# Root Mean Squared Error (RMSE): 371839.1939285367
# R-squared (R^2): 0.3787461308826928
# Mean Absolute Error (MAE): 143605.94681857855

4。討議

リッジ回帰は、L2 ノルム ペナルティ項を導入することでモデルの適合能力と複雑さのバランスを取る、正則化ベースの線形回帰手法です。多重共線性と高次元データの処理に大きな利点があり、モデルの安定性と汎化能力を向上させることができます。リッジ回帰は、係数のサイズを制限することでモデル予測に対する変数間の相関の影響を軽減し、過学習の問題を回避します。正則化パラメーター アルファを調整することで、リッジ回帰モデルの縮小の程度を制御でき、それによってモデルのバイアスと分散のバランスがとれます。

リッジ回帰とラッソ回帰はある程度補完的であり、特徴の選択と係数の削減に関してそれぞれ異なる利点があります。したがって、特定の問題の特性とデータセットの状況に応じて、リッジ回帰またはラッソ回帰の使用を選択するか、2 つの方法を組み合わせることにより、線形回帰問題をより適切に処理し、より正確で安定したモデルを取得できます。

おすすめ

転載: blog.csdn.net/weixin_48093827/article/details/131785505