AI時代系列(1) 機器學習三部曲: 🔹 第一部:《機器學習 —— AI 智慧的啟航》
28/100 第三週:監督學習(回歸)
28. XGBoost 回歸 🚀 競賽冠軍演算法,強大又準確的提升樹模型!
🚀 XGBoost 回歸(Extreme Gradient Boosting Regression)
________________________________________
📌 1️⃣ 什麼是 XGBoost 回歸?
XGBoost(Extreme Gradient Boosting) 是一種基於 梯度提升樹(Gradient Boosting Trees, GBTs) 的強大機器學習演算法。
與傳統的回歸方法(如線性回歸、決策樹回歸)相比,它更擅長:
• 處理非線性數據
• 自動處理缺失值
• 高效且計算速度快
• 適用於大規模數據集
• 防止過擬合(內建正則化機制)
📌 適用場景
• 預測房價、銷售額
• 股票市場預測
• 醫療診斷、風險評估
• 數據科學競賽(Kaggle 冠軍模型!)
________________________________________
📌 2️⃣ XGBoost 回歸 vs. 傳統回歸
線性回歸適用於數據關係明確為線性的情境,計算速度非常快,但對於缺失值的處理能力較差,需要先行手動補齊,且容易出現過擬合問題。決策樹回歸則能處理非線性數據,透過條件分割應對複雜結構,計算速度中等,但同樣存在過擬合風險,且對缺失值需要手動處理。
相比之下,XGBoost 回歸是進階強化版本,不僅適用於結構複雜的數據,還因為底層採用 C++ 實現而計算效率極高,並且內建對缺失值的自動處理能力,搭配正則化技術,有效降低過擬合風險,是處理大型數據與複雜問題時的優選工具。
✅ XGBoost 回歸在大數據和非線性數據中表現最佳!
________________________________________
📌 3️⃣ XGBoost 回歸的核心概念
XGBoost 是 基於梯度提升(Gradient Boosting)的提升樹模型,核心概念包括:
🎯 (1) 梯度提升(Gradient Boosting)
• 使用多棵決策樹來提升預測能力
• 每棵新樹修正前一棵樹的誤差
• 最終將所有樹的預測值加總,得到最終結果
📌 簡單理解 1️⃣ 第一棵決策樹 做出預測
2️⃣ 第二棵樹 修正第一棵樹的錯誤
3️⃣ 重複 n 次,最終組合所有樹的結果來提高準確度
________________________________________
🎯 (2) XGBoost 的優勢
✅ 計算速度快(用 C++ 編寫,並行計算)
✅ 可自動處理缺失值
✅ 防止過擬合(L1 & L2 正則化)
✅ 適用於數值型和分類型特徵
________________________________________
📌 4️⃣ Python 實作:XGBoost 回歸
我們將比較:
1. 決策樹回歸
2. XGBoost 回歸
________________________________________
✅ (1) 產生數據
python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
from xgboost import XGBRegressor
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=(100, 1)) # 房屋面積
y = 5000 * X + 100000 + np.random.randint(-50000, 50000, size=(100, 1)) # 房價(含隨機噪聲)
# 繪製散點圖
plt.scatter(X, y, color='blue', alpha=0.5, label="真實數據")
plt.xlabel("房屋面積(平方公尺)")
plt.ylabel("房價(萬元)")
plt.title("房價 vs. 房屋面積(非線性數據)")
plt.legend()
plt.show()
📌 房價 vs. 房屋面積的關係包含隨機噪聲,適合測試 XGBoost 回歸的能力!
________________________________________
✅ (2) 訓練決策樹回歸 vs. XGBoost
python
# 分割訓練集與測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 🔹 決策樹回歸
tree_reg = DecisionTreeRegressor(max_depth=5, random_state=42)
tree_reg.fit(X_train, y_train)
# 🔹 XGBoost 回歸
xgb_reg = XGBRegressor(objective="reg:squarederror", n_estimators=100, learning_rate=0.1, max_depth=5)
xgb_reg.fit(X_train, y_train)
📌 XGBoost 的 n_estimators=100 代表使用 100 棵樹來訓練,learning_rate=0.1 控制學習速度
________________________________________
✅ (3) 預測與評估
python
# 預測
y_pred_tree = tree_reg.predict(X_test)
y_pred_xgb = xgb_reg.predict(X_test)
# 計算 MSE 和 R²
mse_tree = mean_squared_error(y_test, y_pred_tree)
r2_tree = r2_score(y_test, y_pred_tree)
mse_xgb = mean_squared_error(y_test, y_pred_xgb)
r2_xgb = r2_score(y_test, y_pred_xgb)
print(f"決策樹回歸 - MSE: {mse_tree:.2f}, R²: {r2_tree:.4f}")
print(f"XGBoost 回歸 - MSE: {mse_xgb:.2f}, R²: {r2_xgb:.4f}")
📌 結果示例:
決策樹回歸 - MSE: 3.2e+9, R²: 0.85
XGBoost 回歸 - MSE: 1.5e+9, R²: 0.92
📌 解讀
• XGBoost 回歸的 MSE(誤差)比決策樹回歸低
• R² 更接近 1,表示擬合效果更佳
• XGBoost 能更有效地降低過擬合問題
________________________________________
✅ (4) 視覺化預測曲線
python
# 產生更多測試點來畫曲線
X_grid = np.linspace(min(X), max(X), 100).reshape(-1, 1)
y_pred_xgb_curve = xgb_reg.predict(X_grid)
# 繪製結果
plt.scatter(X, y, color='blue', alpha=0.5, label="真實數據")
plt.plot(X_grid, tree_reg.predict(X_grid), color='red', linewidth=2, label="決策樹回歸")
plt.plot(X_grid, y_pred_xgb_curve, color='green', linewidth=2, label="XGBoost 回歸")
plt.xlabel("房屋面積(平方公尺)")
plt.ylabel("房價(萬元)")
plt.title("XGBoost 回歸 vs. 決策樹回歸")
plt.legend()
plt.show()
📌 結果:
• 決策樹回歸(紅色):較容易過擬合
• XGBoost(綠色):擬合更平滑,對數據適應性更強
________________________________________
📌 5️⃣ XGBoost 回歸的優缺點
✅ 優點
• 比決策樹和隨機森林更準確
• 內建正則化(L1 & L2),減少過擬合
• 可處理缺失值
• 訓練速度快(C++ 實作,並行運算)
⚠ 缺點
• 參數較多,需要調參
• 計算資源需求較高(適合大數據)
________________________________________
🎯 總結
✅ XGBoost 回歸是比決策樹更強大的回歸模型!
✅ 適合大數據與非線性數據,計算速度快!
✅ 防止過擬合,能自動處理缺失值!
🚀 下一步:學習「深度學習回歸」來進一步提升預測能力!🌲🔥