Я использовал API Scikit-learn для XGBoost (в python). Моя точность была ~ 75%. Я использовал тот же набор параметров и использовал Learning API для XGBoost; моя точность была ~ 87%. Насколько я понимаю, Scikit-Learn API - это оболочка вокруг Learning API, и поэтому они должны давать мне те же результаты. Я не понимаю, почему я получаю разные результаты от этих двух API.
# scikit learn API
cores=16
random_state=0
params = {
'n_estimators': 420,
'learning_rate': 0.3,
'max_depth': 3,
'min_child_weight': 2.0,
'subsample': 0.8,
'gamma': 0.2,
'tree_method':'gpu_exact',
'colsample_bytree': 0.65,
'alpha' : 1.5,
'lambda': 0.7,
'nthread': cores,
'objective': 'binary:logistic',
'booster': 'gbtree',
'seed': random_state,
'eta':0.05,
'silent': 1
}
model = xgb.XGBClassifier(**params)
model.fit(X_train,y_train)
print(model)
# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))
# Timer
elapsed = time.time() - start
print("Job time: %f" % (elapsed))
Результаты
XGBClassifier(alpha=1.5, base_score=0.5, booster='gbtree',
colsample_bylevel=1, colsample_bytree=0.65, eta=0.05, gamma=0.2,
lambda=0.7, learning_rate=0.3, max_delta_step=0, max_depth=3,
min_child_weight=2.0, missing=None, n_estimators=420, n_jobs=1,
nthread=16, objective='binary:logistic', random_state=0,
reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=0, silent=1,
subsample=0.8, tree_method='gpu_exact')
Точность: 75,16%
# Learning API
params = {
'learning_rate': 0.3,
'max_depth': 3,
'min_child_weight': 2.0,
'subsample': 0.8,
'gamma': 0.2,
'tree_method':'gpu_exact',
'colsample_bytree': 0.65,
'alpha' : 1.5,
'lambda': 0.7,
'nthread': cores,
'objective': 'binary:logistic',
'booster': 'gbtree',
'seed': random_state,
'silent': 1
}
dtrain = xgb.DMatrix(X_train, label=y_train)
dvalid = xgb.DMatrix(X_test, label=y_test)
# fit model no training data
model = xgb.train(params=params,dtrain=dtrain,num_boost_round=420)
# make predictions for test data
y_pred = model.predict(dvalid)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))
Точность: 87,26%