ゼファーネットのロゴ

リッジ回帰とは何ですか? [更新しました]

日付:

目次

寄稿者: プラシャーントアショク

リッジ 回帰 は、多重共線性の影響を受けるデータを分析するために使用されるモデル調整手法です。このメソッドは L2 正則化を実行します。多重共線性の問題が発生し、最小二乗法に偏りがなく、分散が大きい場合、予測値が実際の値から大きく離れてしまいます。 

リッジ回帰のコスト関数:

Min(||Y – X(θ)||^2 + λ||θ||^2)

ラムダはペナルティ項です。ここで与えられる λ はリッジ関数のアルファパラメータで表されます。したがって、アルファの値を変更することで、ペナルティ期間を制御します。アルファの値が高くなるほどペナルティも大きくなるため、係数の大きさは小さくなります。

  • パラメータを縮小します。したがって、多重共線性を防ぐために使用されます。
  • 係数の収縮によりモデルの複雑さを軽減します
  • 無料コースをチェックしてください 回帰分析.

リッジ回帰モデル 

どのタイプの回帰機械学習モデルでも、次のように記述される通常の回帰方程式がベースを形成します。

Y = XB + e

ここで、Y は従属変数、X は独立変数、B は推定される回帰係数、e は誤差が残差であることを表します。 

この方程式にラムダ関数を追加すると、一般モデルでは評価されない分散が考慮されます。データの準備が整い、L2 正則化の一部であることが特定された後、実行できる手順があります。

標準化 

リッジ回帰では、最初のステップは、変数 (従属および独立の両方) の平均を減算し、標準偏差で割ることによって変数を標準化することです。これにより、特定の式の変数が標準化されているかどうかを何らかの方法で示さなければならないため、表記法に問題が生じます。標準化に関する限り、すべてのリッジ回帰計算は標準化された変数に基づいています。最終的な回帰係数が表示されると、元のスケールに調整されます。ただし、尾根跡は規格化された縮尺です。

また読む: 機械学習におけるサポート ベクトル回帰

バイアスと分散のトレードオフ

実際のデータセットでリッジ回帰モデルを構築する場合、バイアスと分散のトレードオフは一般に複雑になります。ただし、覚えておく必要がある一般的な傾向は次のとおりです。

  1. λが増加するにつれてバイアスも増加します。
  2. 分散は、λが増加するにつれて減少します。

リッジ回帰の仮定

リッジ回帰の仮定は、線形性、定数分散、独立性という線形回帰の仮定と同じです。ただし、リッジ回帰では信頼限界が提供されないため、誤差の分布が正規であると仮定する必要はありません。

ここで、線形回帰問題の例を取り上げ、リッジ回帰を実装した場合に誤差がどのように軽減されるかを見てみましょう。

特定の地域での売上を向上させるために食品の最適な組み合わせを見つけようとしている食品レストランに関するデータセットを検討します。 

必要なライブラリをアップロードする

import numpy as np   
import pandas as pd
import os
 
import seaborn as sns
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt   
import matplotlib.style
plt.style.use('classic')
 
import warnings
warnings.filterwarnings("ignore")

df = pd.read_excel("food.xlsx")

データに対してすべての EDA を実行し、欠損値を処理した後、データセット内にカテゴリ変数を含めることができないため、ダミー変数の作成に進みます。

df =pd.get_dummies(df, columns=cat,drop_first=True)

ここで、 columns=cat はデータセット内のすべてのカテゴリ変数です。

この後、線形回帰法用のデータセットを標準化する必要があります。

変数を連続変数としてスケーリングすると、重みが異なります

#Scales the data. Essentially returns the z-scores of every attribute
 
from sklearn.preprocessing import StandardScaler
std_scale = StandardScaler()
std_scale

df['week'] = std_scale.fit_transform(df[['week']])
df['final_price'] = std_scale.fit_transform(df[['final_price']])
df['area_range'] = std_scale.fit_transform(df[['area_range']])

トレーニングとテストの分割

# Copy all the predictor variables into X dataframe
X = df.drop('orders', axis=1)
 
# Copy target into the y dataframe. Target variable is converted in to Log. 
y = np.log(df[['orders']])

# Split X and y into training and test set in 75:25 ratio
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25 , random_state=1)

線形回帰モデル

また読む: 線形回帰とは何ですか?

# invoke the LinearRegression function and find the bestfit model on training data
 
regression_model = LinearRegression()
regression_model.fit(X_train, y_train)

# Let us explore the coefficients for each of the independent attributes
 
for idx, col_name in enumerate(X_train.columns):
    print("The coefficient for {} is {}".format(col_name, regression_model.coef_[0][idx]))

The coefficient for week is -0.0041068045722690814
The coefficient for final_price is -0.40354286519747384
The coefficient for area_range is 0.16906454326841025
The coefficient for website_homepage_mention_1.0 is 0.44689072858872664
The coefficient for food_category_Biryani is -0.10369818094671146
The coefficient for food_category_Desert is 0.5722054451619581
The coefficient for food_category_Extras is -0.22769824296095417
The coefficient for food_category_Other Snacks is -0.44682163212660775
The coefficient for food_category_Pasta is -0.7352610382529601
The coefficient for food_category_Pizza is 0.499963614474803
The coefficient for food_category_Rice Bowl is 1.640603292571774
The coefficient for food_category_Salad is 0.22723622749570868
The coefficient for food_category_Sandwich is 0.3733070983152591
The coefficient for food_category_Seafood is -0.07845778484039663
The coefficient for food_category_Soup is -1.0586633401722432
The coefficient for food_category_Starters is -0.3782239478810047
The coefficient for cuisine_Indian is -1.1335822602848094
The coefficient for cuisine_Italian is -0.03927567006223066
The coefficient for center_type_Gurgaon is -0.16528108967295807
The coefficient for center_type_Noida is 0.0501474731039986
The coefficient for home_delivery_1.0 is 1.026400462237632
The coefficient for night_service_1 is 0.0038398863634691582


#checking the magnitude of coefficients
from pandas import Series, DataFrame
predictors = X_train.columns
 
coef = Series(regression_model.coef_.flatten(), predictors).sort_values()
plt.figure(figsize=(10,8))
 
coef.plot(kind='bar', title='Model Coefficients')
plt.show()

回帰モデルにプラスの効果を示す変数は、food_category_Rice Bowl、home_delivery_1.0、food_category_Desert、food_category_Pizza、website_homepage_mention_1.0、food_category_Sandwich、food_category_Salad、area_range で、これらの要素はモデルに大きな影響を与えます。

リッジ回帰とラッソ回帰: 主な違いを理解する

線形回帰モデルの世界では、リッジ回帰とラッソ回帰が 2 つの基本的な手法として際立っており、どちらも特に複雑で高次元のデータを扱う状況で、モデルの予測精度と解釈可能性を高めるように設計されています。 2 つの主な違いは、損失関数にペナルティを追加することで過剰適合を防ぐ方法である正則化へのアプローチにあります。リッジ回帰はチホノフ正則化とも呼ばれ、係数の大きさの 2 乗に比例するペナルティ項を追加します。この方法では、係数がゼロに向かって縮小されますが、正確にゼロになることはなく、それによりモデルの複雑さと多重共線性が軽減されます。対照的に、Lasso 回帰 (最小絶対収縮および選択演算子) には、係数の大きさの絶対値であるペナルティ項が含まれています。この独特のアプローチは、係数を縮小するだけでなく、係数の一部をゼロに減らすこともできるため、特徴選択が効果的に実行され、結果としてよりシンプルで解釈しやすいモデルが得られます。

リッジ回帰またはなげなわ回帰を使用するかどうかは、データセットの特定の要件と解決すべき根本的な問題によって異なります。リッジ回帰は、すべての特徴が関連していると想定されている場合、または多重共線性のあるデータセットがある場合に推奨されます。これは、係数をそれらの間で分配することで相関関係のある入力をより効果的に処理できるためです。一方、なげなわ回帰は、倹約が有利な状況、つまりモデルに寄与する特徴の数を減らすことが有益な状況で優れています。これは、特徴の選択が不可欠となる高次元データセットで特に役立ちます。ただし、相関性の高いフィーチャの場合、なげなわは一貫性がなくなる可能性があります。したがって、Ridge と Lasso のどちらを選択するかは、データの性質、望ましいモデルの複雑さ、および分析の具体的な目標によって決定される必要があり、多くの場合、相互検証と比較モデルのパフォーマンス評価を通じて決定されます。

機械学習におけるリッジ回帰

  • リッジ回帰は機械学習の重要な手法であり、過学習や多重共線性が発生しやすいシナリオで堅牢なモデルを作成するために不可欠です。この方法は、係数の 2 乗に比例するペナルティ項を導入することで標準線形回帰を修正します。これは、相関性の高い独立変数を扱う場合に特に役立ちます。リッジ回帰の主な利点としては、複雑さのペナルティを追加することで過剰適合を効果的に軽減し、相関変数間の効果のバランスを取ることで多重共線性を管理し、モデルの一般化を強化して目に見えないデータのパフォーマンスを向上させることが挙げられます。
  • 実際の設定でのリッジ回帰の実装には、一般にラムダとして知られる適切な正則化パラメータを選択するという重要なステップが含まれます。この選択は通常、相互検証手法を使用して行われ、モデルのトレーニングに固有のバイアスと分散のトレードオフのバランスを取るために不可欠です。リッジ回帰は、Python のさまざまな機械学習ライブラリで広くサポートされています。 scikit-learn 顕著な例です。ここでの実装には、モデルの定義、ラムダ値の設定、フィッティングと予測のための組み込み関数の使用が含まれます。その有用性は、正確な予測と堅牢なモデル構築が最重要である金融や医療分析などの分野で特に顕著です。最終的に、精度を向上させ、複雑なデータセットを処理できるリッジ回帰の能力は、機械学習の動的な分野における継続的な重要性を確固たるものにします。

また読む: 分位点回帰とは何ですか?

ベータ係数の値が大きいほど、影響は大きくなります。

ライスボウル、ピザ、デザートなどの料理には、宅配や website_homepage_mention などの機能が備わっており、需要や注文の頻度が高い場合に重要な役割を果たします。

レストランの注文を予測するための回帰モデルに対する負の影響を示す変数:cuisine_Indian、food_category_Soup、food_category_Pasta、food_category_Other_Snacks。

予想通り、final_price は注文に悪影響を及ぼします。

スープ、パスタ、その他のスナック、インド料理のカテゴリなどの料理は、レストランでの注文数に関するモデルの予測に悪影響を及ぼすため、他のすべての予測変数は一定に保たれます。

注文頻度のモデル予測にほとんど影響を与えない変数には、week と night_service があります。

モデルを通じて、変数のオブジェクト タイプやカテゴリ変数が連続変数よりも重要であることがわかります。

また読む: Python の正規表現の概要

[埋め込まれたコンテンツ]

正則化

  1. Ridge のハイパーパラメータであるアルファの値。これは、モデルによって自動的に学習されず、手動で設定する必要があることを意味します。最適なアルファ値を求めるグリッド検索を実行します。
  2. リッジ正則化に最適なアルファを見つけるために、GridSearchCV を適用しています。
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
 
ridge=Ridge()
parameters={'alpha':[1e-15,1e-10,1e-8,1e-3,1e-2,1,5,10,20,30,35,40,45,50,55,100]}
ridge_regressor=GridSearchCV(ridge,parameters,scoring='neg_mean_squared_error',cv=5)
ridge_regressor.fit(X,y)

print(ridge_regressor.best_params_)
print(ridge_regressor.best_score_)

{'alpha': 0.01}
-0.3751867421112124

負符号はグリッド検索相互検証ライブラリの既知のエラーによるものであるため、負符号は無視してください。

predictors = X_train.columns
 
coef = Series(ridgeReg.coef_.flatten(),predictors).sort_values()
plt.figure(figsize=(10,8))
coef.plot(kind='bar', title='Model Coefficients')
plt.show()

上記の分析から、最終モデルは次のように定義できると判断できます。

注文数 = 4.65 + 1.02home_delivery_1.0 + .46 website_homepage_mention_1 0+ (-.40* 最終価格) + .17area_range + 0.57food_category_Desert + (-0.22food_category_Extras) + (-0.73food_category_Pasta) + 0.49food_category_Pizza + 1.6food_category_Rice_Bowl + 0.22食品カテゴリーサラダ + 0.37 food_category_Sandwich + (-1.05food_category_Soup) + (-0.37food_category_Starters) + (-1.13cuisine_Indian) + (-0.16center_type_Gurgaon)

回帰モデルに影響を与える上位 5 つの変数は次のとおりです。

  1. 食べ物カテゴリー_丼もの
  2. ホーム_配達_1.0
  3. 食品カテゴリー_ピザ
  4. 食べ物カテゴリー_砂漠
  5. website_homepage_mention_1

ベータ係数が高いほど、予測変数はより重要になります。したがって、特定のレベルのモデルをチューニングすると、ビジネス上の問題に影響を与える最適な変数を見つけることができます。

このブログが役に立ち、そのような概念についてさらに詳しく知りたい場合は、参加してください。 Great Learning Academy の無料オンライン コース

リッジ回帰とは何ですか?

リッジ回帰は、過学習を軽減し、予測精度を向上させるためにバイアスを追加する線形回帰手法です。

リッジ回帰は通常の最小二乗法とどう違うのですか?

通常の最小二乗法とは異なり、リッジ回帰には、モデルの複雑さを軽減するために係数の大きさにペナルティが含まれています。

リッジ回帰を使用する必要があるのはどのような場合ですか?

多重共線性を扱う場合、または観測値よりも予測変数が多い場合は、リッジ回帰を使用します。

リッジ回帰における正則化パラメータの役割は何ですか?

正則化パラメーターは係数収縮の程度を制御し、モデルの単純さに影響します。

リッジ回帰は非線形関係を処理できますか?

リッジ回帰は主に線形関係を対象としていますが、非線形性を表す多項式項が含まれる場合があります。

リッジ回帰はソフトウェアにどのように実装されますか?

ほとんどの統計ソフトウェアには、変数の指定とパラメーター値を必要とするリッジ回帰用の組み込み関数が用意されています。

最適な正則化パラメータを選択するには?

最適なパラメーターは、多くの場合、グリッド検索やランダム検索などの手法を使用した相互検証によって見つかります。

リッジ回帰の限界は何ですか?

これにはすべての予測子が含まれるため、解釈が複雑になる可能性があり、最適なパラメーターを選択するのは困難な場合があります。

スポット画像

最新のインテリジェンス

スポット画像