Почему я получаю разные результаты от Scikit-learn API и Learning API XGBoost (часть 2)? - PullRequest
0 голосов
/ 08 мая 2019

Я использовал 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%

...