這一節主要介紹以下使用XGBoost算法再CPU/GPU版本下代碼的編寫基本流程,主要分為以下幾個部分:
- 構造訓練集/驗證
- 算法參數設置
- XGBoost模型訓練/驗證
- 模型預測
本節主要面對的任務場景是回歸任務,有關多分類的任務見:XGBoost–4–代碼編寫基本流程–分類
另外,除上述幾個部分外,會涉及到sklearn用於加載數據集以及最后的模型預測的評價指標計算;
導入使用到的庫:
import time
import xgboost as xgb
from sklearn.datasets import load_diabetes, load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error
from libs.xgboost_plot import plot_training_merror
1. 構造數據集/驗證集
使用sklearn
導入數據集,並進一步拆分成訓練集、驗證;
# 使用sklearn加載數據集
diabetes = load_boston()
data, labels = diabetes.data, diabetes.target
# 拆分數據集
x_train, x_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=7)
print("x_train: {}, x_test: {}".format(x_train.shape, x_test.shape))
構造XGBoost算法需要的輸入格式:
dtrain = xgb.DMatrix(x_train, y_train) # 訓練集
dtest = xgb.DMatrix(x_test, y_test) # 驗證集
evals = [(dtrain, 'train'), (dtest, 'val')] # 訓練過程中進行驗證
2. 算法參數設置
算法模型參數設置,詳情見:XGBoost Parameters
params = {
'tree_method': "gpu_hist",
'booster': 'gbtree',
'objective': 'reg:squarederror',
'max_depth': 6,
'eval_metric': 'mae',
'eta': 0.01,
'verbosity': 0,
'gpu_id': 0
}
簡單介紹以下:
tree_method
,gpu_hist
表示使用GPU運算,影響的可以使用hist
利用CPU計算;objective
,目標函數eval_metric
: 訓練過程中的評估方法
3. XGBoost模型訓練/驗證
模型訓練、保存模型、繪制mae
圖像;
s_time = time.time()
train_res = {}
model = xgb.train(params, dtrain, num_boost_round=300,
evals=evals,
evals_result=train_res)
print("模型訓練耗時: {}".format(time.time() - s_time))
# 模型保存
save_path = "./saved_model/model_regression.model"
model.save_model(save_path)
# train/val的merror繪圖
merror_img_path = "./test/error.png"
plot_training_merror(train_res, merror_img_path, type='mae')
4. 模型預測
模型預測,打印預測結果:
pred_data = model.predict(dtest)
res = mean_absolute_error(y_test, pred_data)
print(res)
...
[298] train-mae:1.47924 val-mae:2.60373
[299] train-mae:1.46995 val-mae:2.59919
模型訓練耗時: 1.8448662757873535
2.5991851900138103
5. 結語
XGBoost最最最最基本的回歸任務基本代碼編寫流程就是這樣了,當然了,這是最最最基本的了:
- 構建數據集
- 參數設置
- 模型訓練、保存、預測;
同樣地,在實際的業務應用中,每一步都存在很多點值得深究;
例如,有一句話說特征工程的高度就決定了算法模型的精度,那么在構造數據集之前的特征工程的重要性不言而喻;
另外,在參數設置過程中,某些參數的使用對於訓練的過程也起到了至關重要的作用,例如樹深度、目標函數、評價方法、正則化項等等很多東西;
所以說,還是那句話,知其然知其所以然,本節僅僅用於說明在回歸任務中編寫XGBoost算法模型的基本流程,接下來一起向下深究,解決好我們所面對的實際任務。