最後我們來到的「模型評估」的環節啦,基本上就是最後幫你的模型表現做驗證,我選了一些常見的評估法來進行判斷:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import learning_curve
from sklearn.metrics import mean_squared_error, r2_score
from xgboost import XGBRegressor
# 1. 基本評估指標
y_pred = best_xgb.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
r2 = r2_score(y_test, y_pred)
print(f"RMSE: {rmse:.4f}")
print(f"R2 Score: {r2:.4f}")
# 2. 殘差分析
residuals = y_test - y_pred
plt.figure(figsize=(10, 6))
plt.scatter(y_pred, residuals)
plt.xlabel('預測值')
plt.ylabel('殘差')
plt.title('殘差圖')
plt.axhline(y=0, color='r', linestyle='--')
plt.show()
# 3. 學習曲線
train_sizes, train_scores, test_scores = learning_curve(
best_xgb, X_processed, y, cv=5, n_jobs=-1,
train_sizes=np.linspace(0.1, 1.0, 10), scoring='neg_mean_squared_error')
train_scores_mean = np.sqrt(-np.mean(train_scores, axis=1))
test_scores_mean = np.sqrt(-np.mean(test_scores, axis=1))
plt.figure(figsize=(10, 6))
plt.plot(train_sizes, train_scores_mean, label='訓練誤差')
plt.plot(train_sizes, test_scores_mean, label='驗證誤差')
plt.xlabel('訓練樣本數')
plt.ylabel('RMSE')
plt.title('學習曲線')
plt.legend()
plt.show()
# 4. 預測vs實際值的散點圖
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2)
plt.xlabel('實際值')
plt.ylabel('預測值')
plt.title('實際值 vs 預測值')
plt.show()
這樣測試完就可以大概知道模型訓練的表現啦!看起來還不錯,我們接下來也可以來實際透過資料來玩玩看是不是真的可以來預測房價了~
在寫的過程中我也是不斷地跟 AI 討論和測試才完成這個模型的建立,老實說沒有 AI 的輔助我覺得我很難真的完成這個模型的建立,因此我認為現在是一個最好的時代,只要你有想法跟實踐的心,基本上想實現什麼都是有機會的,也辛苦一路一起參與的你,讓我們在下一篇文章來測試我們努力的結果吧!