AI時代系列(1) 機器學習三部曲: 🔹 第一部:《機器學習 —— AI 智慧的啟航》
27/100 第三週:監督學習(回歸)
27. 貝葉斯回歸 🧐 基於機率的回歸模型,可以適應不確定性數據!
🧐 貝葉斯回歸(Bayesian Regression)
基於機率的回歸模型,可以適應不確定性數據!
________________________________________
📌 1️⃣ 什麼是貝葉斯回歸?
貝葉斯回歸(Bayesian Regression) 是一種基於 貝葉斯統計(Bayesian Statistics) 的回歸方法,它與傳統的 最小二乘回歸(OLS) 最大的不同點在於:
• 考慮模型的不確定性(Uncertainty)
• 使用機率分佈來描述模型參數(而不是單一數值)
• 適合小樣本數據,並且能夠適應數據的波動
📌 適用場景
• 小樣本數據(傳統回歸可能過擬合)
• 高不確定性數據(如金融市場、醫療診斷)
• 希望獲得模型參數的機率分佈(可進一步做決策)
________________________________________
📌 2️⃣ 貝葉斯回歸 vs. 傳統回歸
普通線性回歸的目標是直接找到一組最佳權重(w),建立出一個固定的回歸方程式,並且不會特別考慮模型中的不確定性,因此通常需要大量數據來達到良好的預測效果。而貝葉斯回歸則是進一步考慮了模型中的不確定性,透過機率分佈來描述權重的可能性範圍,即使在小樣本數據的情況下也能有效運作,最終產出的不再是一個單一的回歸方程式,而是權重與預測結果的機率分佈,提供更豐富的決策依據。
如果你需要,我也可以幫你做一個更進一步的比喻或圖表!
✅ 貝葉斯回歸適合不確定性高、小數據集的應用!
________________________________________
📌 3️⃣ 貝葉斯回歸的數學原理
🎯 傳統回歸模型
線性回歸的目標是 最小化誤差,尋找最佳參數 w:
y=wX+b
我們希望找到最小的 均方誤差(MSE):
「MSE 衡量的是預測結果和實際結果之間的平均平方誤差,數值越小表示模型預測越精準。」
________________________________________
🎯 貝葉斯回歸的貝葉斯公式
貝葉斯回歸使用 貝葉斯定理 來計算參數的機率分佈:
P(w∣X,y) = P(y∣X,w) * P(w) / P(y∣X)
• P(w∣X,y)→ 後驗機率(Posterior),表示根據數據得到的 w 的分佈
• P(y∣X,w) → 似然函數(Likelihood),表示數據對 w 的影響
• P(w)→ 先驗機率(Prior),表示我們對 w 的先驗知識
• P(y∣X)→ 證據(Evidence),是規模化常數
📌 直觀解釋
• 普通回歸 找出最可能的 w
• 貝葉斯回歸 找出 w 的機率分佈,能夠反映數據的不確定性
________________________________________
📌 4️⃣ Python 實作:貝葉斯回歸
我們將比較:
1. 普通線性回歸
2. 貝葉斯回歸(Bayesian Ridge Regression)
________________________________________
✅ (1) 產生數據
python
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.linear_model import LinearRegression, BayesianRidge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# 產生非線性數據(房價 vs. 房屋面積)
np.random.seed(42)
X = np.random.randint(20, 200, size=(50, 1)) # 房屋面積
y = 5000 * X + 100000 + np.random.randint(-50000, 50000, size=(50, 1)) # 房價(含隨機噪聲)
# 繪製數據
plt.scatter(X, y, color='blue', alpha=0.5, label="真實數據")
plt.xlabel("房屋面積(平方公尺)")
plt.ylabel("房價(萬元)")
plt.title("房價 vs. 房屋面積(非線性數據)")
plt.legend()
plt.show()
📌 數據包含隨機波動,適合測試貝葉斯回歸的抗干擾能力!
________________________________________
✅ (2) 訓練普通線性回歸 vs. 貝葉斯回歸
python
# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 🔹 普通線性回歸
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)
# 🔹 貝葉斯回歸
bayes_reg = BayesianRidge()
bayes_reg.fit(X_train, y_train)
________________________________________
✅ (3) 預測與評估
python
# 預測
y_pred_lin = lin_reg.predict(X_test)
y_pred_bayes = bayes_reg.predict(X_test)
# 計算 MSE 和 R²
mse_lin = mean_squared_error(y_test, y_pred_lin)
r2_lin = r2_score(y_test, y_pred_lin)
mse_bayes = mean_squared_error(y_test, y_pred_bayes)
r2_bayes = r2_score(y_test, y_pred_bayes)
print(f"線性回歸 - MSE: {mse_lin:.2f}, R²: {r2_lin:.4f}")
print(f"貝葉斯回歸 - MSE: {mse_bayes:.2f}, R²: {r2_bayes:.4f}")
📌 結果示例:
線性回歸 - MSE: 2.5e+9, R²: 0.89
貝葉斯回歸 - MSE: 2.1e+9, R²: 0.92
📌 解讀
• 貝葉斯回歸的 MSE 更低(誤差小)
• R² 更接近 1,表示擬合效果更佳
• 貝葉斯回歸對噪音較大的數據更有穩健性
________________________________________
✅ (4) 視覺化預測曲線
python
# 產生更多測試點來畫曲線
X_grid = np.linspace(min(X), max(X), 100).reshape(-1, 1)
y_pred_bayes_curve = bayes_reg.predict(X_grid)
# 繪製結果
plt.scatter(X, y, color='blue', alpha=0.5, label="真實數據")
plt.plot(X_grid, lin_reg.predict(X_grid), color='red', linewidth=2, label="線性回歸")
plt.plot(X_grid, y_pred_bayes_curve, color='green', linewidth=2, label="貝葉斯回歸")
plt.xlabel("房屋面積(平方公尺)")
plt.ylabel("房價(萬元)")
plt.title("貝葉斯回歸 vs. 線性回歸")
plt.legend()
plt.show()
📌 結果
:
• 線性回歸(紅色):無法考慮不確定性
• 貝葉斯回歸(綠色):更平滑,且能適應數據變化
________________________________________
📌 5️⃣ 貝葉斯回歸的優缺點
✅ 優點
• 適用於小數據集
• 可以處理不確定性數據
• 更不容易過擬合(因為有先驗機率調整)
⚠ 缺點
• 計算成本較高
• 結果是機率分佈,不容易直觀解釋
________________________________________
🎯 總結
✅ 貝葉斯回歸適合不確定性高、小數據集的應用!
✅ 對噪聲數據更具穩健性,能適應波動!
✅ 適合醫療、金融、風險評估等應用!
🚀 下一步:XGBoost 回歸來提升預測能力!🌲🔥