Pythonにおける多重線形回帰:包括的ガイド

導入

複数の独立変数と1つの従属変数の間の関係をモデル化するために使用される基本的な統計的手法である多重線形回帰。Pythonでは、scikit-learnstatsmodelsなどのツールが回帰分析の堅牢な実装を提供しています。このチュートリアルでは、Pythonを使用して複数の線形回帰モデルを実装、解釈、評価する方法を説明します。

前提条件

実装に取り組む前に、以下の準備が整っていることを確認してください。

多重線形回帰とは?

多重線形回帰(MLR)は、従属変数と2つ以上の独立変数との関係をモデル化する統計的手法です。これは、単回帰分析の拡張であり、単一の独立変数との関係をモデル化します。MLRでは、関係は次の式を使用してモデル化されます:

ここで:

例:家の価格をサイズ、寝室数、場所に基づいて予測する。この場合、サイズ、寝室数、場所の3つの独立変数と価格の1つの従属変数(予測する値)があります。

多重線形回帰の仮定

多重線形回帰を実装する前に、以下の仮定が満たされていることを確認することが重要です。

  1. 線形性: 従属変数と独立変数との関係が線形であること。

  2. 誤差の独立性: 残差(誤差)が互いに独立していること。これは、Durbin-Watson検定を使用してしばしば確認されます。

  3. 均一分散性: 残差の分散が独立変数のすべてのレベルで一定であること。残差プロットを使用してこれを確認できます。

  4. 多重共線性がない:独立変数同士が高度に相関していない。多重共線性を検出するためには、分散膨張係数(VIF)が一般的に使用される。

  5. 残差の正規性:残差は正規分布に従うべきです。これはQ-Qプロットを使用して確認できます。

  6. 外れ値の影響:外れ値や高影響点がモデルに過度に影響を与えてはいけません。

これらの仮定は回帰モデルが妥当であり、結果が信頼できることを保証します。これらの仮定を満たさないと、バイアスのあるまたは誤解を招く結果につながる可能性があります。

データの前処理

このセクションでは、Pythonで複数の線形回帰モデルを使用して、California Housing Datasetからの特徴に基づいて家の価格を予測する方法を学びます。データの前処理方法、回帰モデルの適合、および多重共線性、外れ値、特徴選択などの一般的な課題に対処する方法を学びます。

ステップ1 – データセットの読み込み

回帰タスク向けの人気のあるデータセットであるCalifornia Housing Datasetを使用します。このデータセットには、ボストンの郊外の家に関する13の特徴とそれに対応する中央家価格が含まれています。

まず、必要なパッケージをインストールしましょう。

pip install numpy pandas matplotlib seaborn scikit-learn statsmodels
from sklearn.datasets import fetch_california_housing  #sklearn.datasetsからfetch_california_housing関数をインポートしてCalifornia Housingデータセットを読み込みます。
import pandas as pd  #データ操作と分析のためにpandasをインポートします。
import numpy as np  #数値計算のためにnumpyをインポートします。

#fetch_california_housing関数を使用してCalifornia Housingデータセットをロードします。
housing = fetch_california_housing()

#特徴量の名前を列ヘッダーとして使用して、データセットのデータをpandas DataFrameに変換します。
housing_df = pd.DataFrame(housing.data, columns=housing.feature_names)

#データセットのターゲット値を使用して、ターゲット変数'MedHouseValue'をDataFrameに追加します。
housing_df['MedHouseValue'] = housing.target

#データセットの概要を把握するために、DataFrameの最初の数行を表示します。
print(housing_df.head())

データセットの出力は以下のようになります:

 MedInc  HouseAge  AveRooms  AveBedrms  Population  AveOccup  Latitude  Longitude  MedHouseValue
0  8.3252      41.0  6.984127   1.023810       322.0  2.555556     37.88    -122.23          4.526
1  8.3014      21.0  6.238137   0.971880      2401.0  2.109842     37.86    -122.22          3.585
2  7.2574      52.0  8.288136   1.073446       496.0  2.802260     37.85    -122.24          3.521
3  5.6431      52.0  5.817352   1.073059       558.0  2.547945     37.85    -122.25          3.413
4  3.8462      52.0  6.281853   1.081081       565.0  2.181467     37.85    -122.25          3.422

各属性の意味は次の通りです:

Variable Description
MedInc ブロック内の収入の中央値
HouseAge ブロック内の住宅の中央年齢
AveRooms 平均部屋数
AveBedrms 平均寝室数
Population ブロックの人口
AveOccup 平均住宅占有率
Latitude 住宅ブロックの緯度
Longitude 住宅ブロックの経度

ステップ2 – データの前処理

欠損値の確認

解析に影響を及ぼす可能性のあるデータセット内の欠損値がないことを確認します。

print(housing_df.isnull().sum())

出力:

MedInc           0
HouseAge         0
AveRooms         0
AveBedrms        0
Population       0
AveOccup         0
Latitude         0
Longitude        0
MedHouseValue    0
dtype: int64

特徴選択

まず、相関行列を作成して変数間の依存関係を理解します。

correlation_matrix = housing_df.corr()
print(correlation_matrix['MedHouseValue'])

出力:

MedInc           0.688075
HouseAge         0.105623
AveRooms         0.151948
AveBedrms       -0.046701
Population      -0.024650
AveOccup        -0.023737
Latitude        -0.144160
Longitude       -0.045967
MedHouseValue    1.000000

上記の相関行列を分析して、回帰モデル用の依存変数と独立変数を選択できます。相関行列はデータセット内の各変数の関係に関する洞察を提供します。

与えられた相関行列では、MedHouseValueが予測しようとしている変数であるため、これが依存変数です。独立変数はMedHouseValueと有意な相関があります。

相関行列に基づいて、MedHouseValueと有意な相関がある次の独立変数を特定できます:

  • MedInc: この変数はMedHouseValueと強い正の相関(0.688075)を示し、収入が増加すると住宅価格も増加する傾向があることを示しています。
  • AveRooms: この変数はMedHouseValueと中程度の正の相関(0.151948)を示し、世帯当たりの平均部屋数が増加すると住宅価格も増加する傾向があることを示しています。
  • AveOccup: この変数は、MedHouseValue と弱い負の相関(-0.023737)を持ちます。これは、世帯当たりの平均占有率が増加すると、家の価値の中央値が低下する傾向があることを示していますが、その影響は比較的小さいです。

これらの独立変数を選択することで、MedHouseValue との間の関係を捉えた回帰モデルを構築することができます。これにより、収入中央値、平均部屋数、平均占有率に基づいて家の価値の中央値について予測を行うことができます。

以下を使用して、Python で相関行列をプロットすることもできます:

import seaborn as sns
import matplotlib.pyplot as plt

# 'housing_df' がデータを含む DataFrame であると仮定
# 相関行列のプロット
plt.figure(figsize=(10, 8))
sns.heatmap(housing_df.corr(), annot=True, cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()

上記の内容に基づいて、MedInc(収入中央値)、AveRooms(世帯当たりの平均部屋数)、AveOccup(世帯当たりの平均占有率)など、いくつかの主要な特徴に焦点を当てることになります。

selected_features = ['MedInc', 'AveRooms', 'AveOccup']
X = housing_df[selected_features]
y = housing_df['MedHouseValue']

上記のコードブロックは、分析のために housing_df データフレームから特定の特徴を選択します。選択された特徴は、MedIncAveRoomsAveOccupであり、これらは selected_features リストに格納されます。

データフレーム housing_df は、これらの選択された特徴のみを含むようにサブセット化され、その結果が X リストに格納されます。

目的変数 MedHouseValuehousing_df から抽出され、y リストに格納されます。

特徴のスケーリング

特徴量がすべて同じ尺度になるように標準化を使用し、モデルのパフォーマンスと比較性を向上させます。

標準化は、数値的な特徴量を平均が0、標準偏差が1になるようにスケーリングする前処理技術です。このプロセスにより、すべての特徴量が同じ尺度に揃い、入力特徴量の尺度に敏感な機械学習モデルにとって重要です。特徴量を標準化することで、大きな範囲を持つ特徴がモデルを支配する効果を軽減し、モデルのパフォーマンスと比較性を向上させることができます。

from sklearn.preprocessing import StandardScaler

# StandardScalerオブジェクトを初期化
scaler = StandardScaler()

# スケーラーをデータに適合させて変換
X_scaled = scaler.fit_transform(X)

# スケーリングされたデータを表示
print(X_scaled)

出力:

[[ 2.34476576  0.62855945 -0.04959654]
[ 2.33223796  0.32704136 -0.09251223]
[ 1.7826994   1.15562047 -0.02584253]
...
[-1.14259331 -0.09031802 -0.0717345 ]
[-1.05458292 -0.04021111 -0.09122515]
[-0.78012947 -0.07044252 -0.04368215]]

出力は、StandardScalerを適用した後の特徴量MedIncAveRooms、およびAveOccupのスケーリングされた値を表しています。これらの値は、すべての特徴量が同じ尺度に揃い、平均が0、標準偏差が1になっています。

最初の行[ 2.34476576 0.62855945 -0.04959654]は、最初のデータポイントに対して、スケーリングされたMedIncの値が2.34476576、AveRoomsが0.62855945、AveOccupが-0.04959654であることを示しています。同様に、2行目の[ 2.33223796 0.32704136 -0.09251223]は、2番目のデータポイントのスケーリングされた値を表し、以降も同様です。

スケーリングされた値の範囲は、約-1.14259331から2.34476576までであり、これにより特徴量が正規化および比較可能になりました。入力特徴のスケールに敏感な機械学習モデルでは、大きな範囲を持つ特徴がモデルを支配するのを防ぐために、これは重要です。

複数の線形回帰の実装

データ前処理が完了したので、Pythonで複数の線形回帰を実装しましょう。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import seaborn as sns

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 'LinearRegression'モデルが初期化され、トレーニングデータに適合させられます。
model = LinearRegression()
model.fit(X_train, y_train)

# モデルはテストセットのターゲット変数を予測するために使用されます。
y_pred = model.predict(X_test)


print("Mean Squared Error:", mean_squared_error(y_test, y_pred))
print("R-squared:", r2_score(y_test, y_pred))

train_test_split関数を使用してデータをトレーニングセットとテストセットに分割します。ここでは、データの80%がトレーニングに使用され、20%がテストに使用されます。

モデルは、平均二乗誤差とR二乗を使用して評価されます。平均二乗誤差(MSE)は、誤差または偏差の2乗の平均を測定します。

R二乗(R2)は、回帰モデル内の独立変数によって説明される従属変数の分散の割合を表す統計的指標です。

出力:

Mean Squared Error: 0.7006855912225249
R-squared: 0.4652924370503557

上記の出力は、複数の線形回帰モデルのパフォーマンスを評価するための2つの主要な指標を提供します。

平均二乗誤差(MSE): 0.7006855912225249
MSEは、予測値と実際の目的変数値との二乗誤差の平均を測定します。MSEが低いほど、モデルのパフォーマンスが良いことを示し、より正確な予測を行っていることを意味します。この場合、MSEは0.7006855912225249であり、モデルは完璧ではないものの、かなりの精度を持っていることを示しています。通常、MSEの値は0に近いほどよく、より低い値ほどパフォーマンスが良いです。

R二乗値(R2): 0.4652924370503557
R二乗値は、従属変数の分散のうち独立変数から予測可能な部分の割合を測定します。0から1の範囲であり、1は完璧な予測を意味し、0は線形関係がないことを示します。この場合、R二乗値は0.4652924370503557であり、モデルに使用された独立変数によって目的変数の分散の約46.53%が説明できることを示しています。これは、モデルが変数間の関係の重要な部分を捉えることができるが、すべてではないことを示しています。

いくつか重要なプロットを見てみましょう:

# 残差プロット
residuals = y_test - y_pred
plt.scatter(y_pred, residuals, alpha=0.5)
plt.xlabel('Predicted Values')
plt.ylabel('Residuals')
plt.title('Residual Plot')
plt.axhline(y=0, color='red', linestyle='--')
plt.show()

# 予測対実際のプロット
plt.scatter(y_test, y_pred, alpha=0.5)
plt.xlabel('Actual Values')
plt.ylabel('Predicted Values')
plt.title('Predicted vs Actual Values')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=4)
plt.show()

statsmodels

PythonのStatsmodelsライブラリは統計解析に強力なツールです。線形回帰、時系列解析、非パラメトリックな手法など、幅広い統計モデルやテストを提供しています。

複数の線形回帰の文脈では、statsmodelsを使用してデータに線形モデルを適合させ、その後モデルにさまざまな統計テストや分析を行うことができます。これは独立変数と従属変数の関係を理解するのに特に役立ち、モデルに基づいた予測を行うのに役立ちます。

import statsmodels.api as sm

# モデルに定数を追加
X_train_sm = sm.add_constant(X_train)
model_sm = sm.OLS(y_train, X_train_sm).fit()
print(model_sm.summary())

# 残差のQ-Qプロット
sm.qqplot(model_sm.resid, line='s')
plt.title('Q-Q Plot of Residuals')
plt.show()

出力:

==============================================================================
Dep. Variable:          MedHouseValue   R-squared:                       0.485
Model:                            OLS   Adj. R-squared:                  0.484
Method:                 Least Squares   F-statistic:                     5173.
Date:                Fri, 17 Jan 2025   Prob (F-statistic):               0.00
Time:                        09:40:54   Log-Likelihood:                -20354.
No. Observations:               16512   AIC:                         4.072e+04
Df Residuals:                   16508   BIC:                         4.075e+04
Df Model:                           3                                        
Covariance Type:            nonrobust                                        
==============================================================================
                coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          2.0679      0.006    320.074      0.000       2.055       2.081
x1             0.8300      0.007    121.245      0.000       0.817       0.843
x2            -0.1000      0.007    -14.070      0.000      -0.114      -0.086
x3            -0.0397      0.006     -6.855      0.000      -0.051      -0.028
==============================================================================
Omnibus:                     3981.290   Durbin-Watson:                   1.983
Prob(Omnibus):                  0.000   Jarque-Bera (JB):            11583.284
Skew:                           1.260   Prob(JB):                         0.00
Kurtosis:                       6.239   Cond. No.                         1.42
==============================================================================

上記テーブルの要約は次のとおりです:

モデルの要約

モデルは通常最小二乗法回帰モデルであり、線形回帰モデルの一種です。従属変数はMedHouseValueで、モデルのR二乗値は0.485であり、これは約48.5%のMedHouseValueの変動が独立変数によって説明できることを示しています。調整R二乗値は0.484で、これは追加の独立変数を含めることに対してモデルをペナルティするR二乗の修正バージョンです。

モデルの適合度

モデルは最小二乗法を使用して適合され、F統計量は5173であり、モデルが良好に適合していることを示しています。帰無仮説が真であると仮定した場合に観測されるF統計量が少なくとも観測されたものと同じくらい極端である確率は約0です。これは、モデルが統計的に有意であることを示唆しています。

モデル係数

モデルの係数は次のとおりです:

  • 定数項は2.0679であり、すべての独立変数が0のときに予測されるMedHouseValueは約2.0679であることを示しています。
  • x1(この場合MedInc)の係数は0.8300であり、これはMedIncが1単位増加するごとに、他のすべての独立変数が一定であると仮定した場合、予測されるMedHouseValueが約0.83単位増加することを示しています。
  • x2(この場合はAveRooms)の係数は-0.1000であり、x2が1単位増加するごとに、他の独立変数を一定とした場合、予測されるMedHouseValueが約0.10単位減少することを示しています。
  • x3(この場合はAveOccup)の係数は-0.0397であり、x3が1単位増加するごとに、他の独立変数を一定とした場合、予測されるMedHouseValueが約0.04単位減少することを示しています。

モデル診断

モデル診断は以下の通りです:

  • Omnibus検定統計量は3981.290であり、残差が正規分布していないことを示しています。
  • Durbin-Watson 統計量は1.983であり、残差に有意な自己相関がないことを示しています。
  • Jarque-Bera 検定統計量は11583.284であり、残差が正規分布していないことを示しています。
  • 残差の歪度は1.260であり、残差が右に偏っていることを示しています。
  • 残差の尖度は6.239であり、残差が尖った(つまり、正規分布よりも尖ったピークと重いテールを持つ)ことを示しています。
  • 条件数は1.42であり、モデルがデータのわずかな変化に対して敏感でないことを示しています。

多重共線性の対処

多重共線性は、複数の独立変数が互いに高い相関を持つ多重線形回帰の一般的な問題です。これは、係数の推定値が不安定で信頼性に欠けることにつながる可能性があります。

多重共線性を検出し対処するためには、分散膨張係数を使用できます。VIFは、予測子が相関している場合に推定回帰係数の分散がどれだけ増加するかを測定します。VIFが1の場合、特定の予測子と他の予測子との間に相関がないことを意味します。5または10を超えるVIF値は問題のある共線性の量を示します。

以下のコードブロックでは、モデル内の各独立変数のVIFを計算しましょう。VIF値が5を超える場合、その変数をモデルから削除することを検討する必要があります。

from statsmodels.stats.outliers_influence import variance_inflation_factor

vif_data = pd.DataFrame()
vif_data['Feature'] = selected_features
vif_data['VIF'] = [variance_inflation_factor(X_scaled, i) for i in range(X_scaled.shape[1])]
print(vif_data)

# VIF値の棒グラフ
vif_data.plot(kind='bar', x='Feature', y='VIF', legend=False)
plt.title('Variance Inflation Factor (VIF) by Feature')
plt.ylabel('VIF Value')
plt.show()

出力:

   Feature       VIF
0    MedInc  1.120166
1  AveRooms  1.119797
2  AveOccup  1.000488

各特徴のVIF値は以下の通りです:

  • MedInc: VIF値は1.120166で、他の独立変数との相関が非常に低いことを示しています。これは、MedIncがモデル内の他の独立変数と高度に相関していないことを示しています。
  • AveRooms: VIF値は1.119797で、他の独立変数との相関が非常に低いことを示しています。これは、AveRoomsがモデル内の他の独立変数と高度に相関していないことを示しています。
  • AveOccup:VIF値は1.000488であり、他の独立変数との相関がないことを示しています。これは、AveOccupがモデル内の他の独立変数と相関していないことを示しています。

一般的に、これらのVIF値はすべて5未満であり、モデル内の独立変数間に有意な多重共線性がないことを示しています。これは、モデルが安定して信頼性があり、独立変数の係数が多重共線性によって大きく影響を受けていないことを示しています。

クロスバリデーション技術

クロスバリデーションは、機械学習モデルのパフォーマンスを評価するために使用される技術です。これは、限られたデータサンプルがある場合にモデルを評価するために使用される再サンプリング手法です。この手順には、kという単一のパラメータがあり、これは与えられたデータサンプルを分割するグループの数を指します。そのため、この手順はしばしばk分割交差検証と呼ばれます。

from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X_scaled, y, cv=5, scoring='r2')
print("Cross-Validation Scores:", scores)
print("Mean CV R^2:", scores.mean())

# クロスバリデーションスコアのラインプロット
plt.plot(range(1, 6), scores, marker='o', linestyle='--')
plt.xlabel('Fold')
plt.ylabel('R-squared')
plt.title('Cross-Validation R-squared Scores')
plt.show()

出力:

Cross-Validation Scores: [0.42854821 0.37096545 0.46910866 0.31191043 0.51269138]
Mean CV R^2: 0.41864482644003276

クロスバリデーションスコアは、モデルが見知らぬデータでどれだけうまく機能するかを示しています。スコアは0.31191043から0.51269138までの範囲であり、モデルのパフォーマンスが異なる分割で変動していることを示しています。より高いスコアは、より良いパフォーマンスを示します。

平均CV R^2スコアは0.41864482644003276であり、これはモデルが目的変数の分散の約41.86%を平均して説明していることを示しています。これは、モデルが目標変数を予測するのにかなり効果的であることを示す適度な説明レベルであり、さらなる改善や洗練が有益である可能性があります。

これらのスコアは、モデルの一般化能力を評価し、改善のための潜在的な領域を特定するのに使用できます。

特徴選択手法

再帰的特徴除去メソッドは、指定された数の特徴が達成されるまで、最も重要でない特徴を再帰的に除去する特徴選択テクニックです。このメソッドは、多数の特徴を扱う場合や、最も情報のある特徴のサブセットを選択する目的の場合に特に有用です。

提供されたコードでは、まず、sklearn.feature_selectionからRFEクラスをインポートします。次に、指定されたestimator(この場合、LinearRegression)を使用してRFEのインスタンスを作成し、n_features_to_selectを2に設定して、トップ2つの特徴を選択することを示します。

次に、RFEオブジェクトをスケーリングされた特徴量X_scaledとターゲット変数yに適合させます。 RFEオブジェクトのsupport_属性は、選択された特徴量を示すブールマスクを返します。

特徴量のランキングを可視化するために、特徴量名とそれに対応するランキングを持つDataFrameを作成します。 RFEオブジェクトのranking_属性は、各特徴量のランキングを返し、値が低いほど重要な特徴量を示します。 その後、特徴量のランキング値でソートされた特徴のランキングの棒グラフをプロットします。 このプロットは、モデル内の各特徴量の相対的な重要性を理解するのに役立ちます。

from sklearn.feature_selection import RFE
rfe = RFE(estimator=LinearRegression(), n_features_to_select=3)
rfe.fit(X_scaled, y)
print("Selected Features:", rfe.support_)

# 特徴量のランキングの棒グラフ
feature_ranking = pd.DataFrame({
   'Feature': selected_features,
   'Ranking': rfe.ranking_
})
feature_ranking.sort_values(by='Ranking').plot(kind='bar', x='Feature', y='Ranking', legend=False)
plt.title('Feature Ranking (Lower is Better)')
plt.ylabel('Ranking')
plt.show()

出力:

Selected Features: [ True  True False]

上記のチャートに基づいて、最も適した2つの特徴量はMedIncAveRoomsです。 これは、モデルの出力によっても確認できます。従属変数MedHouseValueは、主にMedIncAveRoomsに依存しています。

FAQs

Pythonで複数の線形回帰を実装する方法は?

Pythonで複数の線形回帰を実装するには、statsmodelsscikit-learnなどのライブラリを使用できます。以下はscikit-learnを使用した簡単な概要です:

from sklearn.linear_model import LinearRegression
import numpy as np

# サンプルデータ
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])  # 予測変数
y = np.array([5, 7, 9, 11])  # ターゲット変数

# モデルの作成と適合
model = LinearRegression()
model.fit(X, y)

# 係数と切片の取得
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)

# 予測の作成
predictions = model.predict(X)
print("Predictions:", predictions)

これにより、モデルの適合、係数の取得、および予測の作成方法が示されます。

Pythonにおける複数の線形回帰の仮定は何ですか?

複数の線形回帰は、有効な結果を保証するためにいくつかの仮定に依存しています:

  1. 直線性: 予測変数とターゲット変数の関係は直線的であること。
  2. 独立性: 観測値は互いに独立していること。
  3. 均一分散性: 残差(エラー)の分散が独立変数のすべてのレベルで一定であること。
  4. 残差の正規性: 残差が正規分布していること。
  5. 多重共線性がない: 独立変数同士が高い相関を示していない。

残差プロット、分散膨張係数(VIF)、または統計テストなどのツールを使用してこれらの仮定をテストできます。

Pythonでの多重回帰結果の解釈方法は?

回帰結果からの主要な指標には以下が含まれます:

  1. 係数(coef_): 他の変数を一定とした場合に、対応する予測子が1単位変化したときの目的変数の変化を示します。

例: X1の係数が2の場合、他の変数を一定とした状態でX1が1単位増加すると、目的変数が2増加します。

2.切片(intercept_): すべての予測子がゼロの場合の目的変数の予測値を表します。

3.R二乗: 予測子によって説明される目的変数の分散の割合を説明します。

例: R^2が0.85の場合、目的変数の85%の変動がモデルによって説明されています。

4.P値statsmodels内): 予測子の統計的有意性を評価します。通常、p値が0.05未満の場合、予測子が有意であることを示します。

Pythonにおける単回帰と重回帰の違いは何ですか?

Feature Simple Linear Regression Multiple Linear Regression
独立変数の数 1つ 複数
モデル方程式 y = β0 + β1x + ε y = β0 + β1×1 + β2×2 + … + βnxn + ε
仮定 単回帰と同じく複数の独立変数と同じですが、単一の独立変数を持ちます 単回帰と同じく、ただし複数の独立変数に対する追加の仮定があります
係数の解釈 他の変数を一定とした場合の独立変数の単位変化に対する目標変数の変化(単回帰には適用されません) 他の独立変数を一定とした場合の1つの独立変数の単位変化に対する目標変数の変化
モデルの複雑さ 複雑でない 複雑
モデルの柔軟性 柔軟でない 柔軟
過学習のリスク 低い 高い
解釈可能性 解釈が容易 解釈が難しい
適用性 単純な関係に適している 複数の要因を持つ複雑な関係に適している
寝室の数に基づいて家の価格を予測する 寝室の数、平方フィート、および場所に基づいて家の価格を予測する

結論

この包括的なチュートリアルでは、カリフォルニア住宅データセットを使用して複数線形回帰を実装する方法を学びました。多重共線性、交差検証、特徴量選択、および正則化などの重要な側面に取り組み、各概念を理解するための包括的な知識を提供しました。また、残差、特徴量の重要性、および全体的なモデルのパフォーマンスを示すために可視化を取り入れる方法を学びました。これにより、Pythonで堅牢な回帰モデルを簡単に構築し、これらのスキルを実世界の問題に適用できるようになりました。

Source:
https://www.digitalocean.com/community/tutorials/multiple-linear-regression-python