
- 機器學習基礎
- ML - 首頁
- ML - 簡介
- ML - 入門
- ML - 基本概念
- ML - 生態系統
- ML - Python 庫
- ML - 應用
- ML - 生命週期
- ML - 必備技能
- ML - 實現
- ML - 挑戰與常見問題
- ML - 侷限性
- ML - 現實案例
- ML - 資料結構
- ML - 數學基礎
- ML - 人工智慧
- ML - 神經網路
- ML - 深度學習
- ML - 獲取資料集
- ML - 分類資料
- ML - 資料載入
- ML - 資料理解
- ML - 資料準備
- ML - 模型
- ML - 監督學習
- ML - 無監督學習
- ML - 半監督學習
- ML - 強化學習
- ML - 監督學習 vs. 無監督學習
- 機器學習資料視覺化
- ML - 資料視覺化
- ML - 直方圖
- ML - 密度圖
- ML - 箱線圖
- ML - 相關矩陣圖
- ML - 散點矩陣圖
- 機器學習統計學
- ML - 統計學
- ML - 均值、中位數、眾數
- ML - 標準差
- ML - 百分位數
- ML - 資料分佈
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假設
- ML中的迴歸分析
- ML - 迴歸分析
- ML - 線性迴歸
- ML - 簡單線性迴歸
- ML - 多元線性迴歸
- ML - 多項式迴歸
- ML中的分類演算法
- ML - 分類演算法
- ML - 邏輯迴歸
- ML - K近鄰演算法 (KNN)
- ML - 樸素貝葉斯演算法
- ML - 決策樹演算法
- ML - 支援向量機
- ML - 隨機森林
- ML - 混淆矩陣
- ML - 隨機梯度下降
- ML中的聚類演算法
- ML - 聚類演算法
- ML - 基於質心的聚類
- ML - K均值聚類
- ML - K中心點聚類
- ML - 均值漂移聚類
- ML - 層次聚類
- ML - 基於密度的聚類
- ML - DBSCAN 聚類
- ML - OPTICS 聚類
- ML - HDBSCAN 聚類
- ML - BIRCH 聚類
- ML - 親和傳播
- ML - 基於分佈的聚類
- ML - 凝聚聚類
- ML中的降維
- ML - 降維
- ML - 特徵選擇
- ML - 特徵提取
- ML - 向後剔除法
- ML - 向前特徵構造
- ML - 高相關性過濾
- ML - 低方差過濾
- ML - 缺失值比率
- ML - 主成分分析
- 強化學習
- ML - 強化學習演算法
- ML - 利用與探索
- ML - Q學習
- ML - REINFORCE 演算法
- ML - SARSA 強化學習
- ML - 演員-評論家方法
- 深度強化學習
- ML - 深度強化學習
- 量子機器學習
- ML - 量子機器學習
- ML - 使用 Python 的量子機器學習
- 機器學習雜項
- ML - 效能指標
- ML - 自動工作流程
- ML - 提升模型效能
- ML - 梯度提升
- ML - 自舉匯聚 (Bagging)
- ML - 交叉驗證
- ML - AUC-ROC 曲線
- ML - 網格搜尋
- ML - 資料縮放
- ML - 訓練和測試
- ML - 關聯規則
- ML - Apriori 演算法
- ML - 高斯判別分析
- ML - 成本函式
- ML - 貝葉斯定理
- ML - 精確率和召回率
- ML - 對抗性
- ML - 堆疊
- ML - 時期
- ML - 感知器
- ML - 正則化
- ML - 過擬合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 資料洩露
- ML - 機器學習的貨幣化
- ML - 資料型別
- 機器學習 - 資源
- ML - 快速指南
- ML - 速查表
- ML - 面試題
- ML - 有用資源
- ML - 討論
機器學習中的多元線性迴歸
機器學習中的多元線性迴歸是一種監督演算法,它模擬因變數與多個自變數之間的關係。這種關係用於預測因變數的結果。
多元線性迴歸是機器學習中線性迴歸的一種型別。線性迴歸演算法主要有兩種:
- 簡單線性迴歸 - 它處理兩個特徵(一個因變數和一個自變數)。
- 多元線性迴歸 - 處理兩個以上特徵(一個因變數和多個自變數)。
讓我們詳細討論多元線性迴歸:
什麼是多元線性迴歸?
在機器學習中,多元線性迴歸 (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
載入資料集
我們將資料集載入為名為
自變數為“研發支出”、“管理費用”、“市場支出”。為了簡化起見,我們不使用自變數“州”。
我們將因變數值放入變數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 |
複雜度 | 不太複雜 | 由於多個變數而更復雜 |
實際應用 | 根據平方英尺預測房價,根據廣告支出預測銷售額 | 根據廣告支出、價格和競爭對手活動預測銷售額,根據學習時間、出勤率和智商預測學生成績 |
模型解釋 | 更容易解釋係數 | 由於多個變數而更難解釋 |