ウェブサイト検索

Python の重線形回帰: 包括的なガイド


導入

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

前提条件

実装に入る前に、次のものが揃っていることを確認してください。

  • Python の基本的な理解。初心者向けの Python チュートリアルを参照してください。
  • 機械学習タスク用の scikit-learn に精通していること。 Python scikit-learn チュートリアルを参照してください。
  • Python のデータ視覚化の概念を理解する。 matplotlib を使用して Python 3 でデータをプロットする方法および Python 3 の pandas と Jupyter Notebook を使用したデータ分析と視覚化を参照してください。
  • 次のライブラリとともにインストールされた Python 3.x、numpypandasmatplotlibseabornscikit- learnstatsmodels がインストールされています。

重線形回帰とは何ですか?

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

どこ :

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

重線形回帰の仮定

重線形回帰を実装する前に、次の前提条件が満たされていることを確認することが重要です。

  1. 線形性: 従属変数と独立変数の間の関係は線形です。

  2. 誤差の独立性: 残差 (誤差) は互いに独立しています。これは多くの場合、ダービン-ワトソン テストを使用して検証されます。

  3. 等分散性: 残差の分散は、独立変数のすべての水準にわたって一定です。残差プロットはこれを検証するのに役立ちます。

  4. 多重共線性なし: 独立変数の相関性は高くありません。 Variance Inflation Factor (VIF) は、多重共線性を検出するために一般的に使用されます。

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

  6. 外れ値の影響: 外れ値または高レバレッジ ポイントがモデルに不均衡な影響を与えてはなりません。

これらの仮定により、回帰モデルが有効であり、結果の信頼性が保証されます。これらの前提を満たさないと、偏った結果や誤解を招く結果が生じる可能性があります。

データの前処理

このセクションでは、Python で重線形回帰モデルを使用して、カリフォルニア住宅データセットの特徴に基づいて住宅価格を予測する方法を学習します。多重共線性、外れ値、特徴の選択などの一般的な課題に対処しながら、データを前処理し、回帰モデルを適合させ、そのパフォーマンスを評価する方法を学びます。

ステップ 1 - データセットをロードする

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

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

pip install numpy pandas matplotlib seaborn scikit-learn statsmodels
from sklearn.datasets import fetch_california_housing  # Import the fetch_california_housing function from sklearn.datasets to load the California Housing dataset.
import pandas as pd  # Import pandas for data manipulation and analysis.
import numpy as np  # Import numpy for numerical computing.
Load the California Housing dataset using the fetch_california_housing function.
housing = fetch_california_housing()
Convert the dataset's data into a pandas DataFrame, using the feature names as column headers.
housing_df = pd.DataFrame(housing.data, columns=housing.feature_names)
Add the target variable 'MedHouseValue' to the DataFrame, using the dataset's target values.
housing_df['MedHouseValue'] = housing.target
Display the first few rows of the DataFrame to get an overview of the dataset.
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

各属性の意味は次のとおりです。

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
Assuming 'housing_df' is the DataFrame containing the dataPlotting the correlation matrix
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 データ フレームから特定のフィーチャを選択します。選択された機能は MedIncAveRooms、および AveOccup であり、selected_features リストに保存されます。

DataFrame housing_df は、これらの選択された機能のみを含むようにサブセット化され、結果は X リストに保存されます。

ターゲット変数 MedHouseValuehousing_df から抽出され、y リストに保存されます。

スケーリング機能

標準化を使用して、すべての機能が同じスケールであることを確認し、モデルのパフォーマンスと比較可能性を向上させます。

標準化は、平均が 0、標準偏差が 1 になるように数値特徴をスケーリングする前処理手法です。このプロセスにより、すべての特徴が同じスケールになることが保証されます。これは、入力特徴のスケールに敏感な機械学習モデルにとって不可欠です。特徴を標準化することで、モデルを支配する広い範囲を持つ特徴の影響を軽減し、モデルのパフォーマンスと比較可能性を向上させることができます。

from sklearn.preprocessing import StandardScaler
Initialize the StandardScaler object
scaler = StandardScaler()
Fit the scaler to the data and transform it
X_scaled = scaler.fit_transform(X)
Print the scaled data
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)
The 'LinearRegression' model is initialized and fitted to the training data.
model = LinearRegression()
model.fit(X_train, y_train)
The model is used to predict the target variable for the test set.
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) は、誤差または偏差の二乗の平均を測定します。

R2 (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% がモデルで使用されている独立変数によって説明できることを示しています。これは、モデルが変数間の関係のすべてではなく、重要な部分を捕捉できることを示唆しています。

いくつかの重要なプロットを確認してみましょう。

# Residual Plot
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()
Predicted vs Actual Plot
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
Add a constant to the model
X_train_sm = sm.add_constant(X_train)
model_sm = sm.OLS(y_train, X_train_sm).fit()
print(model_sm.summary())
Q-Q Plot for residuals
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 で、MedHouseValue の変動の約 48.5% が独立変数で説明できることを示しています。調整された R 二乗値は 0.484 です。これは、追加の独立変数がモデルに含まれることに対してペナルティを与える R 二乗の修正バージョンです。

モデルの適合

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

モデル係数

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

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

モデル診断

モデル診断は次のとおりです。

  • オムニバス検定統計量は 3981.290 で、残差が正規分布していないことを示しています。
  • ダービン-ワトソン統計は 1.983 で、残差に有意な自己相関がないことを示しています。
  • Jarque-Bera 検定統計量は 11583.284 で、残差が正規分布していないことを示しています。
  • 残差の歪度は 1.260 で、残差が右に歪んでいることを示します。
  • 残差の尖度は 6.239 で、残差がレプクルティックである (つまり、正規分布よりも高いピークと重い尾部を持つ) ことを示しています。
  • 条件番号は 1.42 で、モデルがデータの小さな変化に敏感ではないことを示しています。

多重共線性の処理

多重共線性は、2 つ以上の独立変数が相互に高度に相関している重線形回帰の一般的な問題です。これにより、係数の推定値が不安定で信頼性の低いものになる可能性があります。

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

以下のコード ブロックで、モデル内の各独立変数の 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)
Bar Plot for VIF Values
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 と呼ばれる 1 つのパラメータがあります。そのため、この手順は 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())
Line Plot for Cross-Validation Scores
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 クラスをインポートします。次に、指定された推定量 (この場合は 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_)
Bar Plot of Feature Rankings
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 に依存します。

よくある質問

Python で重線形回帰を実装するにはどうすればよいですか?

Python で多重線形回帰を実装するには、statsmodelsscikit-learn などのライブラリを使用できます。 scikit-learn を使用した概要を次に示します。

from sklearn.linear_model import LinearRegression
import numpy as np
Example data
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])  # Predictor variables
y = np.array([5, 7, 9, 11])  # Target variable
Create and fit the model
model = LinearRegression()
model.fit(X, y)
Get coefficients and intercept
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)
Make predictions
predictions = model.predict(X)
print("Predictions:", predictions)

これは、モデルを適合させ、係数を取得し、予測を行う方法を示しています。

Python における重回帰の仮定は何ですか?

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

  1. 線形性: 予測変数とターゲット変数の間の関係は線形です。
  2. 独立性: 観測値は互いに独立しています。
  3. 等分散性: 残差 (誤差) の分散は、独立変数のすべての水準にわたって一定です。
  4. 残差の正規性: 残差は正規分布します。
  5. 多重共線性なし: 独立変数は相互に高度な相関関係がありません。

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

Python で重回帰結果をどのように解釈しますか?

回帰結果から得られる主要な指標には次のものがあります。

  1. 係数 (coef_): 他の変数を一定に保ち、対応する予測子の単位変化に対するターゲット変数の変化を示します。

例: 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
Number of Independent Variables One More than one
Model Equation y = β0 + β1x + ε y = β0 + β1x1 + β2x2 + … + βnxn + ε
Assumptions Same as multiple linear regression, but with a single independent variable Same as simple linear regression, but with additional assumptions for multiple independent variables
Interpretation of Coefficients The change in the target variable for a unit change in the independent variable, while holding all other variables constant (not applicable in simple linear regression) The change in the target variable for a unit change in one independent variable, while holding all other independent variables constant
Model Complexity Less complex More complex
Model Flexibility Less flexible More flexible
Overfitting Risk Lower Higher
Interpretability Easier to interpret More challenging to interpret
Applicability Suitable for simple relationships Suitable for complex relationships with multiple factors
Example Predicting house prices based on the number of bedrooms Predicting house prices based on the number of bedrooms, square footage, and location

結論

この包括的なチュートリアルでは、カリフォルニア住宅データセットを使用して重線形回帰を実装する方法を学習しました。多重共線性、相互検証、特徴選択、正則化などの重要な側面に取り組み、それぞれの概念を徹底的に理解しました。また、残差、特徴の重要性、全体的なモデルのパフォーマンスを示すために視覚化を組み込む方法も学びました。 Python で堅牢な回帰モデルを簡単に構築し、これらのスキルを現実の問題に適用できるようになりました。