iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
生成式 AI

從 0 到 1 學習生成式 AI 模型建立以及 Prompt 技巧系列 第 12

第 12 天:模型訓練第七步|模型訓練

  • 分享至 

  • xImage
  •  

現在知道每一種訓練模型他的應用場景以及優缺點後,就回到我們的目的了,因為我們是要做房價的預測,看起來「線性回歸、隨機森林、梯度提升樹」都是可以試試看的模型,我們就以這三個來測試看看效果吧!

模型實測

import numpy as np
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from xgboost import XGBRegressor
from sklearn.metrics import mean_squared_error, r2_score


# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X_processed, y, test_size=0.2, random_state=42)

# 定義評估函數
def evaluate_model(model, X, y):
    predictions = model.predict(X)
    mse = mean_squared_error(y, predictions)
    rmse = np.sqrt(mse)
    r2 = r2_score(y, predictions)
    return rmse, r2

# 1. 線性回歸
lr_model = LinearRegression()
lr_model.fit(X_train, y_train)
lr_rmse, lr_r2 = evaluate_model(lr_model, X_test, y_test)

# 2. 隨機森林
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
rf_rmse, rf_r2 = evaluate_model(rf_model, X_test, y_test)

# 3. XGBoost
xgb_model = XGBRegressor(n_estimators=100, learning_rate=0.1, random_state=42)
xgb_model.fit(X_train, y_train)
xgb_rmse, xgb_r2 = evaluate_model(xgb_model, X_test, y_test)

# 打印結果
print("線性回歸 - RMSE: {:.4f}, R2: {:.4f}".format(lr_rmse, lr_r2))
print("隨機森林 - RMSE: {:.4f}, R2: {:.4f}".format(rf_rmse, rf_r2))
print("XGBoost - RMSE: {:.4f}, R2: {:.4f}".format(xgb_rmse, xgb_r2))

# 使用交叉驗證進行更穩健的評估
models = [
    ("線性回歸", LinearRegression()),
    ("隨機森林", RandomForestRegressor(n_estimators=100, random_state=42)),
    ("XGBoost", XGBRegressor(n_estimators=100, learning_rate=0.1, random_state=42))
]

for name, model in models:
    scores = cross_val_score(model, X_processed, y, cv=5, scoring='neg_mean_squared_error')
    rmse_scores = np.sqrt(-scores)
    print(f"{name} 交叉驗證 RMSE: {rmse_scores.mean():.4f} (+/- {rmse_scores.std() * 2:.4f})")

同時測試多個模型的好處是可以判斷「那個模型的表現比較好」,這樣也可以幫助我們找到合適的模型來進行訓練。

主要判斷的方式是透過 RMSE 和 R2:

  1. RMSE(均方根誤差):越低越好。它表示預測值與實際值的平均偏差。
  2. R²(決定係數):範圍從 0 到 1,越接近 1 表示模型解釋數據的能力越強。

實際執行的結果是
https://ithelp.ithome.com.tw/upload/images/20240823/20168835jVQav6w8Yx.png
因此透過我們實測的結果就可以發現「線性回歸」就不是一個適合我們的模型,反而是隨機森林和 XGBoost 這兩個看起來不相上下,但為了更好的訓練,看起來 XGBoost 會是更好的選擇!這樣我們就選擇到最適合我們的模型了,接下來就是調整參數了!

我們當然要盡可能地讓測試的結果更好,這樣才可以讓模型的效果達到最大化,因此接下來就會需要來優化我們的模型啦!


上一篇
第 11 天:模型訓練第六步|選擇模型
下一篇
第 13 天:模型訓練第八步|模型調參
系列文
從 0 到 1 學習生成式 AI 模型建立以及 Prompt 技巧21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言