XGBoosting Home | About | Contact | Examples

XGBoost Evaluate Model using Random Permutation Cross-Validation (Shuffle Split)

Random permutation cross-validation, such as scikit-learn’s ShuffleSplit, offers an alternative to traditional k-fold cross-validation that can be particularly useful for certain datasets.

By randomly splitting the data into train and test sets multiple times, it provides a robust estimate of your XGBoost model’s performance.

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score, ShuffleSplit
from sklearn.metrics import accuracy_score
from xgboost import XGBClassifier

# Generate a synthetic dataset
X, y = make_classification(n_samples=1000, n_classes=2, random_state=42)

# Create an XGBClassifier
model = XGBClassifier(n_estimators=100, learning_rate=0.1, random_state=42)

# Create a ShuffleSplit object
cv = ShuffleSplit(n_splits=5, test_size=0.2, random_state=42)

# Perform random permutation cross-validation
cv_scores = cross_val_score(model, X, y, cv=cv, scoring='accuracy')

# Print the cross-validation scores
print("Cross-validation scores:", cv_scores)
print(f"Mean cross-validation score: {np.mean(cv_scores):.2f}")

Here’s what’s happening:

  1. We generate a synthetic binary classification dataset using scikit-learn’s make_classification function.
  2. We create an XGBClassifier with specified hyperparameters.
  3. We create a ShuffleSplit object, specifying the number of splits (5), the size of the test set (0.2), and a random state for reproducibility.
  4. We use cross_val_score() to perform random permutation cross-validation, specifying the model, input features (X), target variable (y), the ShuffleSplit object (cv), and the scoring metric (accuracy).
  5. We print the individual cross-validation scores and their mean.

Random permutation cross-validation can be particularly useful when you have a large dataset and want to reduce the computational cost of traditional k-fold cross-validation. It can also help if you suspect that your data might have a specific order that could bias the results of k-fold cross-validation.

By randomly splitting the data multiple times, you get a robust estimate of your model’s performance that isn’t influenced by any particular split. This helps ensure that your model generalizes well to unseen data.

See Also