Моя задача «машинного обучения» - отделить доброкачественный интернет-трафик от вредоносного. В сценарии реального мира большая часть (скажем, 90% или более) интернет-трафика является доброкачественной. Таким образом, я почувствовал, что должен выбрать аналогичную настройку данных для обучения своих моделей. Но я наткнулся на одну или две исследовательские работы (в своей области работы), в которых для обучения моделей использовался подход «балансировки классов», подразумевающий одинаковое количество случаев доброкачественного и злонамеренного трафика.
В общем, если я строю модели машинного обучения, должен ли я использовать набор данных, который представляет проблему реального мира, или сбалансированный набор данных лучше подходит для построения моделей (поскольку некоторые классификаторы плохо себя ведут с дисбалансом классов, или по другим неизвестным мне причинам)?
Может ли кто-то пролить больше света на плюсы и минусы как выбора, так и того, как решить, какой из них выбрать?
Я думаю, что это всегда зависит от сценария. Использование репрезентативного набора данных не всегда является решением. Предположим, что в вашем тренировочном наборе 1000 отрицательных и 20 положительных примеров. Без какой-либо модификации классификатора ваш алгоритм будет классифицировать все новые примеры как отрицательные. В некоторых случаях это нормально, но во многих случаях затраты на отсутствие положительных примеров высоки, поэтому вам нужно найти решение для этого.
В таких случаях вы можете использовать чувствительный к стоимости алгоритм машинного обучения. Например, в случае анализа данных медицинской диагностики.
В итоге: ошибки классификации не имеют одинаковую стоимость!
источник
Всегда есть решение попробовать оба подхода и сохранить тот, который максимизирует ожидаемые результаты.
В вашем случае я бы предположил, что вы предпочитаете минимизировать ложные отрицания за счет некоторого ложного положительного результата, поэтому вы хотите сместить свой классификатор в сторону сильного отрицательного априора и устранить дисбаланс, сократив количество отрицательных примеров в вашем обучающем наборе.
Затем вычислите точность / отзыв, чувствительность / специфичность или любой другой критерий, который вам подходит для полного, несбалансированного набора данных, чтобы убедиться, что вы не проигнорировали значительный шаблон, присутствующий в реальных данных, при построении модели на сокращенных данных.
источник
Разделите операционный и обучающий сценарии.
Операционный сценарий - это сценарий, в котором будет измеряться ваш классификатор. Это где вы должны хорошо работать. Использование должно иметь набор данных, который представляет этот сценарий.
Сценарий обучения - это то, что вы делаете, чтобы построить классификатор, который будет хорошо работать в рабочем сценарии.
Много раз наборы данных в обоих сценариях имеют одну и ту же природу, поэтому нет необходимости различать их. Например, у вас есть какой-то интернет-магазин, поэтому вы используете его для обучения в прошлом, чтобы хорошо работать в будущем. Однако во время обучения вы можете использовать набор данных, отличный от того, который представляет рабочий сценарий. На самом деле, если вы спите, мечтаете о классификаторе, проверяете его в своем рабочем сценарии (этот шаг должен быть сделан после пробуждения), вы так же хороши, как и после обычного пути машинного обучения.
Различие между рабочим и обучающим сценариями становится важным, когда набор данных не сбалансирован. Большинство алгоритмов не будут хорошо работать с таким набором данных.
Итак, не стесняйтесь использовать два набора данных - вы можете использовать сбалансированный набор данных для обучения. Как только вы закончите, проверьте свой классификатор рабочего набора данных.
источник
Я думаю, что есть две отдельные проблемы для рассмотрения: время обучения и точность прогноза.
Возьмем простой пример: представьте, что у вас есть два класса, которые имеют многомерное нормальное распределение. По сути, вам необходимо оценить соответствующие средние классы и ковариации классов. Теперь первое, что вас волнует, - это ваша оценка различий в классе: но ваша производительность ограничена точностью наихудшего оценочного среднего значения: нет смысла оценивать одно среднее с точностью до сотого знака после запятой - если другое среднее значение только оценивается до 1 знака после запятой. Так что использование всех данных - пустая трата вычислительных ресурсов - вместо этого вы можете выбрать более общий класс и соответствующим образом пересчитать классы. (эти вычислительные ресурсы могут быть использованы для изучения различных входных переменных и т. д.)
Теперь вторая проблема заключается в точности прогнозирования: разные алгоритмы используют разные метрики ошибок, которые могут соответствовать или не соответствовать вашим собственным целям. Например, логистическая регрессия оштрафует общую вероятность ошибки, поэтому, если большая часть ваших данных относится к одному классу, она будет стремиться улучшить точные оценки вероятности (например, 90 против 95% вероятности) этого одного класса, а не пытаться идентифицировать редкий класс. В этом случае вы определенно захотите попытаться изменить вес, чтобы подчеркнуть редкий класс (и впоследствии скорректировать оценку [, отрегулировав член смещения], чтобы перестроить оценки вероятности)
источник