Я использую XGBoostClassifier в несбалансированном сценарии, поэтому я хочу включить параметр sample_weight
в функцию fit () . Я использую Python и scikit-learn API.
Проблема в том, что кажется, что XGBoost не принимает во внимание параметр веса. Кроме того, даже если я скажу n_jobs=-1
, обучение не распараллеливается вообще (используется только 1 ЦП).
Это код, который я использую:
from xgboost import XGBClassifier
import copy
# Load data and split into X and y
train_data = pd.read_csv("my_path.csv")
y_train = train_data[TARGET_COL].to_list()
x_train = copy.deepcopy(train_data)
del x_train[TARGET_COL]
# Evaluate weights
w_yes, w_no = evaluate_weights(...)
sample_weights = []
for y in y_train:
if y == 1:
sample_weights.append(w_yes)
elif y == 0:
sample_weights.append(w_no)
model = XGBClassifier(n_jobs=-1)
# Train the model
trained_model = model.fit(x_train, y_train, sample_weight=sample_weights)
w_yes
значения - 25, а w_no
- 0,25.
Даже если веса сильно различаются (исходный набор данных действительно несбалансирован), похоже, что это не дает никаких эффектов, таких как параметр n_jobs
.
Есть идеи? Должен ли я использовать синтаксис XGBoost напрямую, без sklearn API?