logo

重線形回帰

前のトピックでは、単一の独立/予測変数 (X) を使用して応答変数 (Y) をモデル化する単純線形回帰について学びました。ただし、応答変数が複数の予測子変数の影響を受けるさまざまなケースが考えられます。このような場合には、重線形回帰アルゴリズムが使用されます。

さらに、多重線形回帰は、応答変数を予測するために複数の予測変数が必要なため、単純線形回帰の拡張です。次のように定義できます。

重線形回帰は、単一の従属連続変数と複数の独立変数の間の線形関係をモデル化する重要な回帰アルゴリズムの 1 つです。

例:

COの予測2車のエンジンサイズとシリンダー数に基づく排出量。

MLR に関するいくつかの重要なポイント:

  • MLR の場合、従属変数またはターゲット変数 (Y) は連続/実数でなければなりませんが、予測変数または独立変数は連続形式またはカテゴリ形式であってもかまいません。
  • 各特徴変数は、従属変数との線形関係をモデル化する必要があります。
  • MLR は、データポイントの多次元空間を通じて回帰直線を当てはめようとします。

MLR 方程式:

重線形回帰では、ターゲット変数 (Y) は複数の予測変数 x の線形結合です。1、 バツ2、 バツ3、 ...、バツn。これは単純線形回帰の拡張であるため、同じことが重線形回帰方程式に適用され、方程式は次のようになります。

 Y= b<sub>0</sub>+b<sub>1</sub>x<sub>1</sub>+ b<sub>2</sub>x<sub>2</sub>+ b<sub>3</sub>x<sub>3</sub>+...... bnxn ............... (a) 

どこ、

Y= 出力/応答変数

トラとライオンの違い

b0、b1、b2、b3、bn....= モデルの係数。

バツ1、 バツ2、 バツ3、 バツ4,...= さまざまな独立変数/特徴変数

重線形回帰の仮定:

  • 線形関係 ターゲット変数と予測変数の間に存在する必要があります。
  • 回帰残差は次のようにする必要があります。 正規分布
  • MLR はほとんどまたは 多重共線性なし データ内の(独立変数間の相関)。

Python を使用した重線形回帰モデルの実装:

Python を使用して MLR を実装するには、次の問題があります。

問題の説明:

のデータセットがあります スタートアップ企業50社 。このデータセットには、次の 5 つの主要な情報が含まれています。 研究開発支出、管理支出、マーケティング支出、会計年度の状態および利益 。私たちの目標は、どの企業が最大の利益を上げているか、また企業の利益に最も影響を与える要因は何かを簡単に判断できるモデルを作成することです。

利益を見つける必要があるので、それは従属変数であり、他の 4 つの変数は独立変数です。 MLR モデルをデプロイする主な手順は次のとおりです。

    データの前処理手順 MLR モデルをトレーニング セットに適合させる テストセットの結果の予測

ステップ-1: データの前処理ステップ:

一番最初のステップは、ライブラリのインポート:まず、モデルの構築に役立つライブラリをインポートします。以下はそのコードです。

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 
    データセットをインポートしています:ここで、すべての変数を含むデータセット (50_CompList) をインポートします。以下はそのコードです。
 #importing datasets data_set= pd.read_csv(&apos;50_CompList.csv&apos;) 

出力: データセットは次のように取得します。

重線形回帰

上記の出力では、変数が 5 つあり、そのうち 4 つは連続変数、1 つはカテゴリ変数であることが明確にわかります。

    依存変数と独立変数の抽出:
 #Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values 

出力:

アウト[5]:

 array([[165349.2, 136897.8, 471784.1, &apos;New York&apos;], [162597.7, 151377.59, 443898.53, &apos;California&apos;], [153441.51, 101145.55, 407934.54, &apos;Florida&apos;], [144372.41, 118671.85, 383199.62, &apos;New York&apos;], [142107.34, 91391.77, 366168.42, &apos;Florida&apos;], [131876.9, 99814.71, 362861.36, &apos;New York&apos;], [134615.46, 147198.87, 127716.82, &apos;California&apos;], [130298.13, 145530.06, 323876.68, &apos;Florida&apos;], [120542.52, 148718.95, 311613.29, &apos;New York&apos;], [123334.88, 108679.17, 304981.62, &apos;California&apos;], [101913.08, 110594.11, 229160.95, &apos;Florida&apos;], [100671.96, 91790.61, 249744.55, &apos;California&apos;], [93863.75, 127320.38, 249839.44, &apos;Florida&apos;], [91992.39, 135495.07, 252664.93, &apos;California&apos;], [119943.24, 156547.42, 256512.92, &apos;Florida&apos;], [114523.61, 122616.84, 261776.23, &apos;New York&apos;], [78013.11, 121597.55, 264346.06, &apos;California&apos;], [94657.16, 145077.58, 282574.31, &apos;New York&apos;], [91749.16, 114175.79, 294919.57, &apos;Florida&apos;], [86419.7, 153514.11, 0.0, &apos;New York&apos;], [76253.86, 113867.3, 298664.47, &apos;California&apos;], [78389.47, 153773.43, 299737.29, &apos;New York&apos;], [73994.56, 122782.75, 303319.26, &apos;Florida&apos;], [67532.53, 105751.03, 304768.73, &apos;Florida&apos;], [77044.01, 99281.34, 140574.81, &apos;New York&apos;], [64664.71, 139553.16, 137962.62, &apos;California&apos;], [75328.87, 144135.98, 134050.07, &apos;Florida&apos;], [72107.6, 127864.55, 353183.81, &apos;New York&apos;], [66051.52, 182645.56, 118148.2, &apos;Florida&apos;], [65605.48, 153032.06, 107138.38, &apos;New York&apos;], [61994.48, 115641.28, 91131.24, &apos;Florida&apos;], [61136.38, 152701.92, 88218.23, &apos;New York&apos;], [63408.86, 129219.61, 46085.25, &apos;California&apos;], [55493.95, 103057.49, 214634.81, &apos;Florida&apos;], [46426.07, 157693.92, 210797.67, &apos;California&apos;], [46014.02, 85047.44, 205517.64, &apos;New York&apos;], [28663.76, 127056.21, 201126.82, &apos;Florida&apos;], [44069.95, 51283.14, 197029.42, &apos;California&apos;], [20229.59, 65947.93, 185265.1, &apos;New York&apos;], [38558.51, 82982.09, 174999.3, &apos;California&apos;], [28754.33, 118546.05, 172795.67, &apos;California&apos;], [27892.92, 84710.77, 164470.71, &apos;Florida&apos;], [23640.93, 96189.63, 148001.11, &apos;California&apos;], [15505.73, 127382.3, 35534.17, &apos;New York&apos;], [22177.74, 154806.14, 28334.72, &apos;California&apos;], [1000.23, 124153.04, 1903.93, &apos;New York&apos;], [1315.46, 115816.21, 297114.46, &apos;Florida&apos;], [0.0, 135426.92, 0.0, &apos;California&apos;], [542.05, 51743.15, 0.0, &apos;New York&apos;], [0.0, 116983.8, 45173.06, &apos;California&apos;]], dtype=object) 

上記の出力でわかるように、最後の列には、モデルのフィッティングに直接適用するのに適していないカテゴリ変数が含まれています。したがって、この変数をエンコードする必要があります。

ダミー変数のエンコーディング:

バブルソートPython

カテゴリ変数 (State) が 1 つありますが、これはモデルに直接適用できないため、それをエンコードします。カテゴリカル変数を数値にエンコードするには、 ラベルエンコーダ クラス。しかし、それでもまだ何らかの関係的順序があり、間違ったモデルが作成される可能性があるため、これでは十分ではありません。したがって、この問題を解決するには、次を使用します ワンホットエンコーダー , これによりダミー変数が作成されます。以下はそのコードです。

 #Catgorical data from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder_x= LabelEncoder() x[:, 3]= labelencoder_x.fit_transform(x[:,3]) onehotencoder= OneHotEncoder(categorical_features= [3]) x= onehotencoder.fit_transform(x).toarray() 

ここでは、他の変数が連続であるため、1 つの独立変数 (状態) のみをエンコードしています。

出力:

重線形回帰

上記の出力でわかるように、state 列はダミー変数 (0 と 1) に変換されています。 ここで、各ダミー変数列は 1 つの状態に対応します。 。元のデータセットと比較することで確認できます。最初の列は、 カリフォルニア州 、2 番目の列は、 フロリダ州 、3 番目の列は、 ニューヨーク州

注記:すべてのダミー変数を同時に使用しないでください。そのため、ダミー変数の合計数より 1 少ない値にする必要があります。そうしないと、ダミー変数トラップが作成されます。

  • ここで、ダミー変数のトラップを回避するためだけにコードを 1 行記述します。
 #avoiding the dummy variable trap: x = x[:, 1:] 

最初のダミー変数を削除しないと、モデルに多重共線性が生じる可能性があります。

重線形回帰

上の出力画像でわかるように、最初の列が削除されています。

  • 次に、データセットをトレーニング セットとテスト セットに分割します。このコードを以下に示します。
 # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.2, random_state=0) 

上記のコードは、データセットをトレーニング セットとテスト セットに分割します。

出力: 上記のコードは、データセットをトレーニング セットとテスト セットに分割します。 Spyder IDE にある変数エクスプローラー オプションをクリックすると、出力を確認できます。テスト セットとトレーニング セットは次の画像のようになります。

テストセット:

重線形回帰

トレーニングセット:

重線形回帰

注記:MLR では、ライブラリによって機能スケーリングが行われるため、手動で行う必要はありません。

ステップ: 2- MLR モデルをトレーニング セットに適合させる:

これで、トレーニングを提供するためのデータセットが十分に準備されました。これは、回帰モデルをトレーニング セットに適合させることを意味します。それは私たちがやったのと似ています 単純な線形回帰モデル。このコードは次のようになります。

 #Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train) 

出力:

 Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False) 

これで、トレーニング データセットを使用してモデルを正常にトレーニングできました。次のステップでは、テスト データセットを使用してモデルのパフォーマンスをテストします。

ステップ: 3- テストセットの結果の予測:

モデルの最後のステップは、モデルのパフォーマンスを確認することです。テストセットの結果を予測することでそれを行います。予測のために、 y_pred ベクター。以下はそのコードです。

 #Predicting the Test set result; y_pred= regressor.predict(x_test) 

上記のコード行を実行すると、変数エクスプローラー オプションで新しいベクトルが生成されます。予測値とテストセットの値を比較することでモデルをテストできます。

出力:

重線形回帰

上記の出力では、結果セットとテスト セットを予測しました。これら 2 つの値をインデックスごとに比較することで、モデルのパフォーマンスを確認できます。たとえば、最初のインデックスの予測値は次のとおりです。 103015$ 利益とテスト/実際の価値 103282$ 利益。違いはそれだけです 7 これは良い予測なので、最終的にモデルがここで完成します。

インターネットを使用して
  • トレーニング データセットとテスト データセットのスコアも確認できます。以下はそのコードです。
 print(&apos;Train Score: &apos;, regressor.score(x_train, y_train)) print(&apos;Test Score: &apos;, regressor.score(x_test, y_test)) 

出力: スコアは次のとおりです。

 Train Score: 0.9501847627493607 Test Score: 0.9347068473282446 

上記のスコアは、モデルがトレーニング データセットで 95% 正確であり、テスト データセットで 93% 正確であることを示しています。

注記:次のトピックでは、を使用してモデルのパフォーマンスを向上させる方法を見ていきます。後方消去プロセス。

重線形回帰の応用:

重線形回帰には主に 2 つの用途があります。

  • 予測に対する独立変数の有効性:
  • 変更の影響を予測する: