AI時代系列(3) 機器學習三部曲: 🔹 第一部:《機器學習 —— AI 智慧的啟航》
22/100 第三週:監督學習(回歸)
22. 多元線性回歸 📊 考慮多個變數影響,讓預測結果更精準!
📊 多元線性回歸(Multiple Linear Regression)
考慮多個變數影響,讓預測結果更精準!
在實際應用中,影響結果的因素往往不只一個。例如:
• 房價預測 🏠:受 面積、房齡、樓層數 影響
• 銷售額預測 💰:受 廣告費、產品價格、季節 影響
• 健康狀況預測 ❤️:受 飲食習慣、運動量、睡眠時長 影響
這時候,單純的線性回歸不夠精確,我們需要 多元線性回歸!
________________________________________
1️⃣ 什麼是多元線性回歸?
多元線性回歸(Multiple Linear Regression)是線性回歸的擴展版,考慮 多個特徵變數 X1,X2,...,Xn 來預測目標變數 y。
📌 方程式
y=w1X1+w2X2+...+wnXn+by
其中:
• y = 目標值(預測值)
• X1,X2,...,Xn = 輸入變數(特徵)
• w1,w2,...,wn = 權重(每個變數的影響力)
• b = 截距(bias)
🎯 目標
透過 最小二乘法(Least Squares Method),找到最佳的 w 和 b,讓誤差最小化,使預測結果更準確。
________________________________________
2️⃣ 多元線性回歸的 Python 實作
📌 例子:預測房價
假設房價受 房屋面積、房齡、樓層數 三個變數影響,我們使用 多元線性回歸 來建立模型。
________________________________________
✅ (1) 生成數據
python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# 產生隨機數據(50 筆房屋數據)
np.random.seed(42)
X1 = np.random.randint(20, 200, size=50) # 房屋面積(平方公尺)
X2 = np.random.randint(1, 50, size=50) # 房齡(年)
X3 = np.random.randint(1, 10, size=50) # 樓層數
# 房價計算(模擬真實情況)
y = 5000 * X1 - 3000 * X2 + 2000 * X3 + 10000 + np.random.randint(-50000, 50000, size=50)
# 轉換為 DataFrame
df = pd.DataFrame({'面積': X1, '房齡': X2, '樓層': X3, '房價': y})
# 顯示前 5 筆數據
print(df.head())
📌 這些數據模擬真實世界的房價影響因素:
• 面積增加 → 房價上升
• 房齡增加 → 房價下降
• 樓層增加 → 房價略微上升
________________________________________
✅ (2) 訓練多元線性回歸模型
python
# 分割訓練集與測試集(80% 訓練,20% 測試)
X = df[['面積', '房齡', '樓層']] # 特徵變數
y = df['房價'] # 目標變數
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創建並訓練模型
model = LinearRegression()
model.fit(X_train, y_train)
# 獲取最佳參數
w1, w2, w3 = model.coef_ # 權重
b = model.intercept_ # 截距
print(f"多元線性回歸方程:房價 = {w1:.2f} * 面積 + {w2:.2f} * 房齡 + {w3:.2f} * 樓層 + {b:.2f}")
📌 結果示例:
房價=4978.32×面積−3021.45×房齡+1987.30×樓層+10342.67
解讀
• 每增加 1 平方公尺,房價增加 4978.32 元
• 每增加 1 年房齡,房價減少 3021.45 元
• 每增加 1 層樓,房價增加 1987.30 元
________________________________________
✅ (3) 預測與評估模型
python
from sklearn.metrics import mean_squared_error, r2_score
# 預測測試集房價
y_pred = model.predict(X_test)
# 計算均方誤差(MSE)與 R²
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"MSE(均方誤差):{mse:.2f}")
print(f"R² 決定係數:{r2:.4f}")
📌 R²(決定係數)
• 範圍:0 ~ 1
• 越接近 1,表示模型擬合效果越好
• 若 R² 很低,可能需要考慮非線性回歸
________________________________________
3️⃣ 多元線性回歸的優缺點
✅ 優點
• 考慮多個變數,提高預測準確度
• 結果具有可解釋性,每個變數的影響力明確
• 計算效率高,適合大數據應用
⚠ 缺點
• 假設變數之間沒有共線性(Multicollinearity)
o 例如:「房屋面積」和「房間數」可能高度相關,影響回歸效果
• 無法擬合非線性數據
o 例如:「房價 vs. 季節變化」,可能需要 多項式回歸或決策樹回歸
• 容易受異常值(Outliers)影響
________________________________________
4️⃣ 如何處理變數之間的共線性?
📌 (1) 檢查特徵之間的相關性
python
import seaborn as sns
# 計算特徵之間的相關係數
correlation_matrix = df.corr()
# 繪製熱圖
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title("特徵之間的相關性")
plt.show()
📌 若兩個變數高度相關(接近 1 或 -1),可能需要刪除其中一個!
📌 結論
✅ 多元線性回歸考慮多個變數,使預測更精準!
✅ 適合應用於房價預測、銷售額預測、健康分析等領域
✅ 但要注意變數之間的共線性,下一章節介紹使用 Ridge/Lasso