Я пытаюсь использовать sample_weight
в XGBClassifier
для повышения производительности одной из наших моделей.
Однако кажется, что параметр sample_weight
работает не так, как ожидалось.sample_weight
очень важно для этой проблемы.Пожалуйста, смотрите мой код ниже.
В принципе, пример модели не учитывает параметр sample_weight
- он начинается с AUC 0,5 и падает оттуда, рекомендуя 0 или 1 n_estimators
.В исходных данных нет ничего плохого - мы построили очень хорошую модель, используя веса выборки, используя другой инструмент, чтобы получить хороший показатель Джини.
Предоставленные данные выборки не демонстрируют должным образом это поведение, но дают согласованное случайное начальное числоповсюду мы видим, что объекты модели идентичны независимо от того, предоставлен weight
/ sample_weight
или нет.
Я пробовал разные компоненты из библиотеки xbgoost, которые аналогичным образом имеют параметры, в которых можно определять веса, ноне повезло:
XGBClassifier.fit()
XGBClassifier.train()
Xgboost()
XGB.fit()
XGB.train()
Dmatrix()
XGBGridSearchCV()
Я также попробовал fit_params=fit_params
в качестве параметра, а также weight=weight
и sample_weight=sample_weight
вариации
Код:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier
df = pd.DataFrame(columns =
['GB_FLAG','sample_weight','f1','f2','f3','f4','f5'])
df.loc[0] = [0,1,2046,10,625,8000,2072]
df.loc[1] = [0,0.86836,8000,10,705,8800,28]
df.loc[2] = [1,1,2303.62,19,674,3000,848]
df.loc[3] = [0,0,2754.8,2,570,16300,46]
df.loc[4] = [1,0.103474,11119.81,6,0,9500,3885]
df.loc[5] = [1,0,1050.83,19,715,3000,-5]
df.loc[6] = [1,0.011098,7063.35,11,713,19700,486]
df.loc[7] = [0,0.972176,6447.16,18,681,11300,1104]
df.loc[8] = [1,0.054237,7461.27,18,0,0,4]
df.loc[9] = [0,0.917026,4600.83,8,0,10400,242]
df.loc[10] = [0,0.670026,2041.8,21,716,11000,3]
df.loc[11] = [1,0.112416,2413.77,22,750,4600,271]
df.loc[12] = [0,0,251.81,17,806,3800,0]
df.loc[13] = [1,0.026263,20919.2,17,684,8100,1335]
df.loc[14] = [0,1,1504.58,15,621,6800,461]
df.loc[15] = [0,0.654429,9227.69,4,0,22500,294]
df.loc[16] = [0,0.897051,6960.31,22,674,5400,188]
df.loc[17] = [1,0.209862,4481.42,18,745,11600,0]
df.loc[18] = [0,1,2692.96,22,651,12800,2035]
y = np.asarray(df['GB_FLAG'])
X = np.asarray(df.drop(['GB_FLAG'], axis=1))
X_traintest, X_valid, y_traintest, y_valid = train_test_split(X, y,
train_size=0.7, stratify=y, random_state=1337)
traintest_sample_weight = X_traintest[:,0]
valid_sample_weight = X_valid[:,0]
X_traintest = X_traintest[:,1:]
X_valid = X_valid[:,1:]
model = XGBClassifier()
eval_set = [(X_valid, y_valid)]
model.fit(X_traintest, y_traintest, eval_set=eval_set, eval_metric="auc", e
early_stopping_rounds=50, verbose = True, sample_weight =
traintest_sample_weight)
Как использовать веса выборки при использовании xgboost
для моделирования?