XGBoosting Home | About | Contact | Examples

Configure XGBoost Dart "one_drop" Parameter

The one_drop parameter is a boolean flag specific to the XGBoost Dart booster, which can be specified by setting booster='dart'. When enabled, it ensures that at least one tree is always dropped during the dropout process at each boosting iteration.

By forcing the dropout of at least one tree, the one_drop parameter allows implementing the Binomial-plus-one or epsilon-dropout techniques described in the original DART paper. Using one_drop can provide additional regularization to the model and help prevent overfitting.

Here’s an example demonstrating how to set the one_drop parameter and its effect on model performance:

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score

# Generate a synthetic classification dataset
X, y = make_classification(n_samples=10000, n_features=10, n_classes=2, random_state=42)

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Initialize an XGBClassifier with dart booster and one_drop=False
clf_no_one_drop = XGBClassifier(booster='dart', max_depth=5, learning_rate=0.1, n_estimators=100,
                                rate_drop=0.2, one_drop=False, random_state=42)

# Initialize an XGBClassifier with dart booster and one_drop=True
clf_with_one_drop = XGBClassifier(booster='dart', max_depth=5, learning_rate=0.1, n_estimators=100,
                                  rate_drop=0.2, one_drop=True, random_state=42)

# Train the models
clf_no_one_drop.fit(X_train, y_train)
clf_with_one_drop.fit(X_train, y_train)

# Make predictions on the test set
pred_no_one_drop = clf_no_one_drop.predict(X_test)
pred_with_one_drop = clf_with_one_drop.predict(X_test)

# Evaluate the models
accuracy_no_one_drop = accuracy_score(y_test, pred_no_one_drop)
accuracy_with_one_drop = accuracy_score(y_test, pred_with_one_drop)

print(f"Accuracy (one_drop=False): {accuracy_no_one_drop:.4f}")
print(f"Accuracy (one_drop=True): {accuracy_with_one_drop:.4f}")

In this example, we generate a synthetic binary classification dataset and split it into training and testing sets. We then initialize two XGBClassifier instances with the dart booster, one with one_drop=False and another with one_drop=True. All other parameters, such as max_depth, learning_rate, and rate_drop, are kept the same between the two models.

After training both models, we make predictions on the test set and evaluate their accuracies. The output will show the difference in performance between the model without the one_drop flag and the model with one_drop enabled.

By comparing the accuracies, you can observe the impact of the one_drop parameter on the model’s generalization ability. Enabling one_drop can provide an additional level of regularization, which may help improve the model’s performance on unseen data by further reducing overfitting.

When using the XGBoost Dart booster, it’s recommended to experiment with the one_drop flag along with other hyperparameters to find the optimal configuration for your specific dataset and problem.

See Also