Как мне построить собственную метрику оценки для минимизации ошибки теста для моего сильно несбалансированного класса с использованием XGBoost?

Используйте .equals() в отличие от == при сравнении объектов. == сравнивает ссылки на объекты, тогда как .equals() проверяет, имеют ли они одинаковые значения. Поскольку у двух объектов очень редко есть одна и та же ссылка, вы никогда не должны использовать ==, кроме сравнения примитивных типов (int, char, но String не является примитивным типом!), Где это не имеет значения.

Итак, вы хотите:

if (pkPublicExBI.equals(pkPublicExBIrecreated)) {

Вместо

if (pkPublicExBI == pkPublicExBIrecreated) {
1
задан Kspr 5 March 2019 в 08:03
поделиться

1 ответ

Во-первых, если вы сохраните набор данных как есть, вы, скорее всего, будете всегда склонны недооценивать класс [outlier = 1], так как лучше прогнозировать [outlier = 0], если он неизвестен, что Вы, кажется, понимаете.

Есть несколько простых вещей, которые вы можете сделать:

  • При выборке из представленного класса: если у вас есть 200 [outlier = 1], вы можете взять случайным образом 200-иш [outlier = 0]. Однако, похоже, что количество данных будет слишком низким. Он легко реализуется, поэтому вы можете попробовать.

  • Чрезмерная выборка недопредставленного класса: полная противоположность, когда вы в основном копируете / вставляете данные из [outliers = 1], чтобы получить примерно одинаковое количество случаев.

Эти методы обычно считаются эквивалентными, однако в вашем случае, я думаю, что избыточная выборка приведет к избыточной подгонке. Поскольку оба класса не имеют одинаковый диапазон возможных значений и в диапазоне [700, 4000], 200 точек данных недостаточно для правильного обобщения.

Теперь, чтобы перейти к более сложным вещам, вы можете попробовать загрузиться. Для получения более подробной информации об этой методике см. Повторная выборка начальной загрузки для несбалансированных данных в контролируемом обучении Жоржа Дюпре и Масато Коды для методологии. Это может сработать, и вы можете использовать для этого sklearn.utils.resample. Я считаю этот урок довольно хорошим.

Bootstrapping - это метод повторной выборки, который позволяет использовать несколько сбалансированных наборов данных для обучения. Вы должны быть осторожны при переоснащении.

Что касается используемых метрик, то вы хотите использовать AUROC, ROC или Precision / Recall. Вы можете прочитать хорошую статью о том, какие метрики использовать для несбалансированных наборов данных .

Наконец, вы можете использовать Алгоритмы Penalize, которые существенно делают так, что ошибка в наименее представленной группе (здесь [outlier = 1]) является более дорогостоящей. Иногда его используют в медицинских целях, где пациенту скорее всего поставят диагноз «больной», а не наоборот.

Эта замечательная статья, которая подводит итоги , должна быть прочитана.

0
ответ дан Sysmetryx 5 March 2019 в 08:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: