XGBoosting Home | About | Contact | Examples

XGBoost "scale_pos_weight" Parameter Unused For Regression

The scale_pos_weight parameter in XGBoost is designed to handle class imbalance in binary classification problems. However, it has no effect on the performance of the XGBRegressor model, which is used for regression tasks.

In this example, we’ll demonstrate that the scale_pos_weight parameter does not influence the performance of the XGBRegressor model by generating a synthetic regression dataset, training multiple XGBRegressor models with different scale_pos_weight values, and comparing their performance using evaluation metrics.

import numpy as np
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from xgboost import XGBRegressor
from sklearn.metrics import mean_squared_error, r2_score

# Generate a synthetic regression dataset
X, y = make_regression(n_samples=1000, n_features=10, noise=0.1, random_state=42)

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

# Define a range of scale_pos_weight values to test
scale_pos_weight_values = [0.1, 1, 10, 100]

# Train and evaluate XGBRegressor models with different scale_pos_weight values
for scale_pos_weight in scale_pos_weight_values:
    model = XGBRegressor(n_estimators=100, scale_pos_weight=scale_pos_weight, random_state=42)
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    print(f"scale_pos_weight: {scale_pos_weight}, MSE: {mse:.4f}, R2: {r2:.4f}")

Output:

scale_pos_weight: 0.1, MSE: 1709.6567, R2: 0.8987
scale_pos_weight: 1, MSE: 1709.6567, R2: 0.8987
scale_pos_weight: 10, MSE: 1709.6567, R2: 0.8987
scale_pos_weight: 100, MSE: 1709.6567, R2: 0.8987

The code generates a synthetic regression dataset using sklearn.datasets.make_regression, splits the data into train and test sets, and defines a range of scale_pos_weight values to test.

We then train multiple XGBRegressor models with different scale_pos_weight values and evaluate each model’s performance using Mean Squared Error (MSE) and R-squared (R2) metrics from sklearn.metrics.

The output shows that the performance of the XGBRegressor model remains the same for all scale_pos_weight values, confirming that the parameter has no effect on regression tasks.

In conclusion, while the scale_pos_weight parameter is useful for handling class imbalance in binary classification problems, it has no impact on the performance of the XGBRegressor model for regression tasks.



See Also