Производительность модели XGBoost - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь использовать XGBoost для классификации. Я очень сомневаюсь в его точности. Я применил его с параметрами по умолчанию и точность 100%.

xg_cl_default = xgb.XGBClassifier()
xg_cl_default.fit(trainX, trainY)
preds = xg_cl_default.predict(testX)

precision_score(testY,preds)
# 1.0

Однако мои данные несбалансированы, поэтому я использую параметр scale_pos_weight вместе с несколькими другими параметрами, приведенными ниже:

ratio = int(df_final.filter(col('isFraud')==0).count()/df_final.filter(col('isFraud')==1).count())    

xg_cl = xgb.XGBClassifier(scale_pos_weight = ratio, n_estimators=50)

eval_set = [(valX, valY.values.ravel())]
xg_cl.fit(trainX, trainY.values.ravel(),eval_metric="error", early_stopping_rounds=10,eval_set=eval_set, verbose=True)

preds = xg_cl_default.predict(testX)

precision_score(testY,preds)
# 1.0

В обоих случаях моя точность составляет 100%, а Recall - 99%. . Для меня это неприемлемо, поскольку данные очень несбалансированы.

1 Ответ

0 голосов
/ 18 июня 2020

Для несбалансированных наборов данных более подходящим показателем оценки c является область под кривой точности-отзыва, поэтому вместо этого установите eval_metric="aucpr".

Кроме того, вам следует настроить параметры XGBoost с помощью перекрестного валидации, снова с площадью под кривой точности-отзыва в качестве показателя оценки c. Перекрестная проверка может выполняться разными способами, и быстрый поиск должен дать вам несколько примеров кода. Основываясь на коде, которым вы поделились, если ваша проблема не является тривиальной, маловероятно, что вы сможете получить значимую модель без тщательной настройки параметров.

Наконец, вы можете построить матрицу путаницы используя Scikit-Learn на основе истинных и предсказанных меток, чтобы понять, делает ли модель значимые прогнозы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...