Tôi muốn tối ưu hóa siêu đường kính của XGboost bằng cách sử dụng giá trị chéo. Tuy nhiên, không rõ làm thế nào để có được mô hình từ xgb.cv
. Ví dụ tôi gọi objective(params)
từ fmin
. Sau đó mô hình được trang bị trên dtrain
và xác nhận trên dvalid
. Điều gì sẽ xảy ra nếu tôi muốn sử dụng phương pháp xác định giá trị KFold thay vì đào tạo dtrain
?
from hyperopt import fmin, tpe
import xgboost as xgb
params = {
'n_estimators' : hp.quniform('n_estimators', 100, 1000, 1),
'eta' : hp.quniform('eta', 0.025, 0.5, 0.025),
'max_depth' : hp.quniform('max_depth', 1, 13, 1)
#...
}
best = fmin(objective, space=params, algo=tpe.suggest)
def objective(params):
dtrain = xgb.DMatrix(X_train, label=y_train)
dvalid = xgb.DMatrix(X_valid, label=y_valid)
watchlist = [(dtrain, 'train'), (dvalid, 'eval')]
model = xgb.train(params, dtrain, num_boost_round,
evals=watchlist, feval=myFunc)
# xgb.cv(param, dtrain, num_boost_round, nfold = 5, seed = 0,
# feval=myFunc)