С несбалансированным классом, должен ли я использовать в рамках отбора проб на своих наборах данных по проверке/тестированию?

datascience.stackexchange https://datascience.stackexchange.com/questions/8895

Вопрос

Я новичок в машинном обучении, и я сталкиваюсь с ситуацией. Я работаю над проблемой торгов в реальном времени, с набором данных Ipinyou, и я пытаюсь сделать прогноз клика.

Дело в том, что, как вы, возможно, знаете, набор данных очень неуравновешен: около 1300 отрицательных примеров (не кликов) для 1 положительного примера (нажмите).

Это то, что я делаю:

  1. Загрузите данные
  2. Разделите набор данных на 3 набора данных: A = Training (60%) B = проверка (20%) C = тестирование (20%)
  3. Для каждого набора данных (A, B, C) выполняйте недостаточную выборку на каждом отрицательном классе, чтобы иметь отношение 5 (5 отрицательного примера для 1 положительного примера). Это дает мне 3 новых набора данных, которые более сбалансированы: A 'B' C '

Затем я обучаю свою модель с набором данных A 'и логистической регрессией.

Мой вопрос:

  1. Какой набор данных я должен использовать для проверки? B или B '?

  2. Какой набор данных я должен использовать для тестирования? C или c '

  3. Какие показатели наиболее актуальны для оценки моей модели? F1SCORE, кажется, хорошо используется метрика. Но здесь из -за несбалансированного класса (если я использую наборы данных B и C), точность низкая (до 0,20), а на F1SCORE очень влияет низкий отзыв/точность. Было бы более точно использовать AUCPR или AUCROC?

  4. Если я хочу построить кривую обучения, какие показатели мне следует использовать? (зная, что ошибка %не имеет отношения к делу, если я использую набор данных B 'для проверки)

Спасибо заранее за ваше время !

С Уважением.

Это было полезно?

Решение

Отличный вопрос ... вот несколько конкретных ответов на ваши пронумерованные вопросы:

1) Вы должны пересекать проверку на B, а не B. В противном случае, вы не узнаете, насколько хорошо работает ваш класс баланс. Не могло повредить перекрестную проверку на обоих b а также B` и будет полезен на основе ответа на 4 ниже.

2) Вы должны проверить как на C, так и C` на основе 4 ниже.

3) Я бы придерживался F1, и было бы полезно использовать ROC-AUC, и это обеспечивает хорошую проверку здравомыслия. Оба, как правило, полезны с несбалансированными классами.

4) Это становится действительно сложно. Проблема состоит в том, что лучший метод требует, чтобы вы переосмысливали то, как должны выглядеть кривые обучения, или использовать как повторно подключенные, так и исходные наборы данных.

Классическая интерпретация кривых обучения:

  • Переоценка - Линии не совсем вместе;
  • Подразделение - Линии объединяются, но на слишком низком уровне F1;
  • В самый раз - Линии объединяются с разумным результатом F1.

Теперь, если вы тренируетесь на А и тестировании на C, линии никогда не соберутся полностью. Если вы тренируетесь на A 'и тестируете на C, результаты не будут значимыми в контексте исходной проблемы. Ну так что ты делаешь?

Ответ состоит в том, чтобы тренироваться на `и тестировать на b`, но также проверить на B. Получить оценку F1 для B`, где вы хотите, а затем проверьте оценку F1 для B. Затем проведите тестирование и создайте кривые обучения Для C. Кривые никогда не соберутся вместе, но у вас будет ощущение приемлемого предвзятости ... это разница между F1 (b) и F1 (B`).

Теперь новая интерпретация ваших кривых обучения:

  • Переоценка - Линии не собираются вместе и находятся дальше друг от друга, чем f1 (b`) -f1 (b);
  • Подразделение - Линии не объединяются, но разница меньше, чем F1 (b`) -f1 (b), а оценка F1 (c) находится под F1 (b);
  • В самый раз - Линии не объединяются, но разница меньше, чем F1 (b`) -f1 (b) с оценкой F1 (C), аналогичной F1 (B).

Общий: Я сильно предполагаю, что для несбалансированных классов вы сначала пытаетесь настраивать веса классов в своем алгоритме обучения вместо чрезмерной/недостаточной выборки, поскольку это позволяет избежать всей строгого морали, которую мы изложили выше. Это очень просто в библиотеках, таких как Scikit-Learn и довольно легко вручную код во всем, что использует сигмоидную функцию или большинство голосов.

Надеюсь это поможет!

Другие советы

За 1) а также 2), вы хотите

1) choose a model that performs well on data distributed as you 
   expect the real data will be 
2) evaluate the model on data distributed the same way

Поэтому для этих наборов данных вам не нужно сбалансировать классы.

Вы также можете попробовать использовать веса классов вместо под/превышения, так как это позаботится об этом решении для вас.

За 3) Скорее всего, вы хотите оптимизировать использование любой метрики, на которой вы будете оцениваться (если это конкуренция). Но если это не соображение, все эти модели являются отличным выбором. На F1 может влиять низкая точность, но вы хотите, чтобы это было захвачено. Именно тогда, когда наивные модели (например, угадание класса большинства) могут хорошо забить по некоторым показателям, которые оценки, такие как F1, актуальны.

Что касается 4) Нет ничего плохого в том, чтобы показать, какую метрику вы в конечном итоге оптимизируете.

Вы должны проверить свой классификатор на наборе данных, который представляет, почему он будет использоваться. Лучшим обычно является немодифицированное распределение.

Во время обучения измените набор данных в любом случае, что вам помогает.

Для получения подробной информации см. Должен ли я пойти на «сбалансированный» набор данных или набор данных «представителя»?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с datascience.stackexchange
scroll top