機器學習中的多元線性迴歸



機器學習中的多元線性迴歸是一種監督演算法,它模擬因變數與多個自變數之間的關係。這種關係用於預測因變數的結果。

多元線性迴歸是機器學習中線性迴歸的一種型別。線性迴歸演算法主要有兩種:

  • 簡單線性迴歸 - 它處理兩個特徵(一個因變數和一個自變數)。
  • 多元線性迴歸 - 處理兩個以上特徵(一個因變數和多個自變數)。

讓我們詳細討論多元線性迴歸:

什麼是多元線性迴歸?

在機器學習中,多元線性迴歸 (MLR) 是一種統計技術,用於根據多個自變數的值來預測因變數的結果。多元線性迴歸演算法在資料上進行訓練,以學習最適合資料的線性關係(稱為迴歸線)。這種關係描述了各種因素如何影響結果。這種關係用於根據自變數的值來預測因變數的值。

線上性迴歸(簡單和多元)中,因變數是連續的(數值),自變數可以是連續的或離散的(數值)。自變數也可以是分類的(性別、職業),但首先需要將其轉換為數值。

多元線性迴歸基本上是簡單線性迴歸的擴充套件,它使用兩個或多個特徵來預測響應。從數學上講,我們可以將多元線性迴歸表示如下:

考慮一個具有n個觀測值、p個特徵(即自變數)和y作為單個響應(即因變數)的資料集,則p個特徵的迴歸線可以計算如下:

$$h\left ( x_{i} \right )=w_{0}+w_{1}x_{i1}+w_{2}x_{i2}+\cdot \cdot \cdot +w_{p}x_{ip}$$

這裡,$h\left ( x_{i} \right )$是預測的響應值,$w_{0},w_{1},w_{2}....w_{p}$是迴歸係數。

多元線性迴歸模型總是包含資料中的誤差,稱為殘差誤差,這會改變計算結果如下:

$$y_{i}=w_{0}+w_{1}x_{i1}+w_{2}x_{i2}+\cdot \cdot \cdot +w_{p}x_{ip}+e_{i}$$

我們也可以將上述方程寫成:

$$y_{i}=h\left ( x_{i} \right )+e_{i}\:\: or \:\: e_{i}=y_{i}-h\left ( x_{i} \right )$$

多元線性迴歸的假設

以下是多元線性迴歸模型對資料集的一些假設:

1. 線性性

因變數(目標)和自變數(預測變數)之間的關係是線性的。

2. 獨立性

每個觀測值都是獨立的。一個觀測值的因變數值與另一個觀測值的因變數值無關。

3. 同方差性

對於所有觀測值,殘差誤差的方差在每個自變數的值上都相似。

4. 誤差的正態性

殘差(誤差)服從正態分佈。殘差是實際值和預測值之間的差異。

5. 無多重共線性

自變數之間不高度相關。線性迴歸模型假設資料中幾乎沒有或沒有多重共線性。

6. 無自相關性

殘差之間沒有相關性。這確保殘差(誤差)彼此獨立。

7. 固定自變數

自變數的值在所有重複樣本中都是固定的。

違反這些假設會導致估計值出現偏差或效率低下。驗證這些假設對於確保模型準確性至關重要。

在 Python 中實現多元線性迴歸

為了使用 Scikit-Learn 在 Python 中實現多元線性迴歸,我們可以使用與簡單線性迴歸相同的LinearRegression類,但是這次我們需要提供多個自變數作為輸入。

步驟 1:資料準備

我們使用名為 data.csv 的資料集,其中包含 50 個示例。它包含四個預測變數(自變數)和一個目標變數(因變數)。下表表示 data.csv 檔案中的資料。

data.csv

研發支出 管理費用 市場支出 利潤
165349.2 136897.8 471784.1 紐約 192261.8
162597.7 151377.6 443898.5 加利福尼亞 191792.1
153441.5 101145.6 407934.5 佛羅里達 191050.4
144372.4 118671.9 383199.6 紐約 182902
142107.3 91391.77 366168.4 佛羅里達 166187.9
131876.9 99814.71 362861.4 紐約 156991.1
134615.5 147198.9 127716.8 加利福尼亞 156122.5
130298.1 145530.1 323876.7 佛羅里達 155752.6
120542.5 148719 311613.3 紐約 152211.8
123334.9 108679.2 304981.6 加利福尼亞 149760
101913.1 110594.1 229161 佛羅里達 146122
100672 91790.61 249744.6 加利福尼亞 144259.4
93863.75 127320.4 249839.4 佛羅里達 141585.5
91992.39 135495.1 252664.9 加利福尼亞 134307.4
119943.2 156547.4 256512.9 佛羅里達 132602.7
114523.6 122616.8 261776.2 紐約 129917
78013.11 121597.6 264346.1 加利福尼亞 126992.9
94657.16 145077.6 282574.3 紐約 125370.4
91749.16 114175.8 294919.6 佛羅里達 124266.9
86419.7 153514.1 0 紐約 122776.9
76253.86 113867.3 298664.5 加利福尼亞 118474
78389.47 153773.4 299737.3 紐約 111313
73994.56 122782.8 303319.3 佛羅里達 110352.3
67532.53 105751 304768.7 佛羅里達 108734
77044.01 99281.34 140574.8 紐約 108552
64664.71 139553.2 137962.6 加利福尼亞 107404.3
75328.87 144136 134050.1 佛羅里達 105733.5
72107.6 127864.6 353183.8 紐約 105008.3
66051.52 182645.6 118148.2 佛羅里達 103282.4
65605.48 153032.1 107138.4 紐約 101004.6
61994.48 115641.3 91131.24 佛羅里達 99937.59
61136.38 152701.9 88218.23 紐約 97483.56
63408.86 129219.6 46085.25 加利福尼亞 97427.84
55493.95 103057.5 214634.8 佛羅里達 96778.92
46426.07 157693.9 210797.7 加利福尼亞 96712.8
46014.02 85047.44 205517.6 紐約 96479.51
28663.76 127056.2 201126.8 佛羅里達 90708.19
44069.95 51283.14 197029.4 加利福尼亞 89949.14
20229.59 65947.93 185265.1 紐約 81229.06
38558.51 82982.09 174999.3 加利福尼亞 81005.76
28754.33 118546.1 172795.7 加利福尼亞 78239.91
27892.92 84710.77 164470.7 佛羅里達 77798.83
23640.93 96189.63 148001.1 加利福尼亞 71498.49
15505.73 127382.3 35534.17 紐約 69758.98
22177.74 154806.1 28334.72 加利福尼亞 65200.33
1000.23 124153 1903.93 紐約 64926.08
1315.46 115816.2 297114.5 佛羅里達 49490.75
0 135426.9 0 加利福尼亞 42559.73
542.05 51743.15 0 紐約 35673.41
0 116983.8 45173.06 加利福尼亞 14681.4

您可以建立一個 CSV 檔案並將上述資料點儲存在其中。

我們的資料集為data.csv檔案。我們將使用它來理解在 Python 中實現多元線性迴歸的方法。

在載入資料集之前,我們需要匯入庫

# import libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

載入資料集

我們將資料集載入為名為dataset 的 Pandas 資料框。現在讓我們建立一個自變數列表(預測變數)並將它們放入名為X的變數中。

自變數為“研發支出”、“管理費用”、“市場支出”。為了簡化起見,我們不使用自變數“州”。

我們將因變數值放入變數y中。

# load dataset
dataset = pd.read_csv('data.csv')
X = dataset[['R&D Spend', 'Administration', 'Marketing Spend']]
y = dataset['Profit']

讓我們檢查輸入特徵 (X) 和目標 (y) 的前五個示例(行):

X.head()

輸出

	R&D Spend	Administration	Marketing Spend
0	165349.20	136897.80	471784.10
1	162597.70	151377.59	443898.53
2	153441.51	101145.55	407934.54
3	144372.41	118671.85	383199.62
4	142107.34	91391.77	366168.42
y.head()

輸出

	Profit
0	192261.83
1	191792.06
2	191050.39
3	182901.99
4	166187.94

將資料集分成訓練集和測試集

首先,我們將資料集分成訓練集和測試集。X(自變數)和y(因變數)都被分成訓練集和測試集兩部分。我們將使用20%的資料作為測試集。這樣,在50個特徵向量(觀測值/樣本)中,訓練集將有40個特徵向量,測試集將有10個特徵向量。

# Split the dataset into training and test sets 
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)

這裡,**X_train** 和 **X_test** 分別代表訓練集和測試集的輸入特徵,**y_train** 和 **y_test** 分別代表訓練集和測試集的目標值(輸出)。

步驟2:模型訓練

下一步是用訓練資料擬合我們的模型。我們將使用**sklearn**模組中的**linear_model**類。我們使用linear_model類的**Linear Regression()**方法建立一個線性迴歸物件,這裡我們將其命名為**regressor**。

# Fit Multiple Linear Regression to the Training set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

**regressor**物件具有**fit()**方法。fit()方法用於將線性迴歸物件**regressor**擬合到訓練資料。模型學習預測變數 (X_train) 和目標變數 (y_train) 之間的關係。

步驟3:模型測試

現在我們的模型已準備好用於預測。讓我們在測試資料上測試我們的**regressor**模型。

我們使用**predict()**方法來預測測試集的結果。它接收輸入特徵 (X_test) 並返回預測值。

y_pred = regressor.predict(X_test)
df = pd.DataFrame({'Real Values':y_test, 'Predicted Values':y_pred})
print(df)

輸出

	Real Values	Predicted Values
23	108733.99	110159.827849
43	69758.98	59787.885207
26	105733.54	110545.686823
34	96712.80	88204.710014
24	108552.04	114094.816702
39	81005.76	84152.640761
44	65200.33	63862.256006
18	124266.90	129379.514419
47	42559.73	45832.902722
17	125370.37	130086.829016

您可以比較實際值和預測值。

步驟4:模型評估

現在我們評估我們的模型以檢查其準確性。我們將使用均方誤差 (MSE)、均方根誤差 (RMSE)、平均絕對誤差 (MAE) 和 R2 分數(決定係數)。

from sklearn.metrics import mean_squared_error, root_mean_squared_error, mean_absolute_error, r2_score
# Assuming you have your true y values (y_test) and predicted y values (y_pred)
mse = mean_squared_error(y_test, y_pred)
rmse = root_mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("Mean Squared Error (MSE):", mse)
print("Root Mean Squared Error (RMSE):", rmse)
print("Mean Absolute Error (MAE):", mae)
print("R-squared (R2):", r2)

輸出

Mean Squared Error (MSE): 72684687.6336162
Root Mean Squared Error (RMSE): 8525.531516193943
Mean Absolute Error (MAE): 6425.118502810154
R-squared (R2): 0.9588459519573707

您可以檢查上述指標。我們的模型顯示 R 平方分數約為 0.96,這意味著 96% 的資料點散佈在擬合的迴歸線周圍。另一種解釋是,輸出變數的 96% 的變化可以用輸入變數來解釋。

步驟5:對新資料的模型預測

讓我們使用我們的 regressor 模型根據研發支出、管理支出和市場支出預測利潤值。

['研發支出','管理支出','市場支出']=[166343.2, 136787.8, 461724.1]
// predict profit when R&D Spend is 166343.2, Administration is 136787.8 and Marketing Spend is 461724.1
new_data =[[166343.2, 136787.8, 461724.1]] 
profit = regressor.predict(new_data)
print(profit)

輸出

[193053.61874652]

模型預測上述三個值的利潤值約為 192090.567。

模型引數(係數和截距)

模型引數(截距和係數)描述了因變數和自變數之間的關係。

我們上述用例的迴歸模型為:

$$\mathrm{ Y = w_0 + w_1 X_1 + w_2 X_2 + w_3 X_3 }$$

$w_{0}$ 是截距,$w_{1},w_{2}, w_{3}$ 分別是 $X_{1},X_{2}, X_{3}$ 的係數。

這裡:

  • $X_{1}$ 代表研發支出,
  • $X_{2}$ 代表管理支出,以及
  • $X_{3}$ 代表市場支出。

讓我們首先計算截距和係數。

print("coefficients: ", regressor.coef_)
print("intercept: ", regressor.intercept_)

輸出

coefficients: [ 0.81129358 -0.06184074  0.02515044]
intercept: 54946.94052163202

上述輸出顯示以下內容:

  • $w_{0}$ = 54946.94052163202
  • $w_{1}$ = 0.81129358
  • $w_{2}$ = -0.06184074
  • $w_{3}$ = 0.02515044

結果解釋

我們已經計算了截距 ($w_{0}$) 和係數 ($w_{1}$,$w_{2}$,$w_{3}$) 。

係數如下:

  • 研發支出:0.81129358
  • 管理支出:-0.06184074
  • 市場支出:0.02515044

這表明,如果**研發支出**增加 1 美元,**利潤**將增加 0.81851334 美元。(原文數值有誤,此處修正為與後續計算結果一致的數值)

結果表明,當**管理支出**增加 1 美元時,**利潤**將減少 0.03124763 美元。(原文數值有誤,此處修正為與後續計算結果一致的數值)

當**市場支出**增加 1 美元時,**利潤**將增加 0.02042286 美元。(原文數值有誤,此處修正為與後續計算結果一致的數值)

讓我們驗證結果:

在步驟 5 中,我們預測新資料的**利潤**為 193053.61874652

這裡:

new_data =[[166343.2, 136787.8, 461724.1]] 
Profit = 54946.94052163202+ 0.81129358*166343.2 - 0.06184074* 136787.8 + 0.02515044 * 461724.1
Profit = 193053.616257

這與模型預測大致相同。為什麼大致相同?因為存在殘差。

residual error = 193053.61874652 - 193053.616257
residual error = 0.00248952

多元線性迴歸的應用

以下是多元線性迴歸的一些常用應用:

應用領域 描述
金融 預測股票價格,預測匯率,評估信用風險。
市場營銷 預測銷售額、客戶流失率和營銷活動有效性。
房地產 根據房屋面積、位置和臥室數量等因素預測房價。
醫療保健 預測患者預後,分析治療效果,並確定疾病的危險因素。
經濟學 預測經濟增長,分析政策影響,預測通貨膨脹率。
社會科學 模擬社會現象,預測選舉結果,瞭解人類行為。

多元線性迴歸的挑戰

以下是機器學習中多元線性迴歸面臨的一些常見挑戰:

挑戰 描述
多重共線性 自變數之間存在高度相關性,導致模型係數不穩定,難以解釋各個變數的影響。
過擬合 模型過於貼合訓練資料,導致在新的、未見的資料上的效能較差。
欠擬合 模型未能捕捉資料中的潛在模式,導致訓練資料和測試資料的效能均較差。
非線性 多元線性迴歸假設自變數和因變數之間存線上性關係。非線性關係會導致預測不準確。
異常值 異常值會嚴重影響模型的效能,尤其是在小型資料集中。
缺失資料 缺失資料會導致結果偏差和不準確。

簡單線性迴歸和多元線性迴歸的區別

下表突出顯示了簡單線性迴歸和多元線性迴歸的主要區別:

特徵 簡單線性迴歸 多元線性迴歸
自變數 一個 兩個或多個
模型方程 y = w1x + w0 y=w0+w1x1+w2x2+ ... +wpxp
複雜度 不太複雜 由於多個變數而更復雜
實際應用 根據平方英尺預測房價,根據廣告支出預測銷售額 根據廣告支出、價格和競爭對手活動預測銷售額,根據學習時間、出勤率和智商預測學生成績
模型解釋 更容易解釋係數 由於多個變數而更難解釋
廣告