Лучший способ обработки несбалансированного мультиклассового набора данных с помощью SVM


9

Я пытаюсь построить модель предсказания с SVM на довольно несбалансированных данных. Мои метки / выходные данные имеют три класса, положительный, нейтральный и отрицательный. Я бы сказал, что положительный пример составляет около 10–20% моих данных, нейтральный - около 50–60%, а отрицательный - около 30–40%. Я пытаюсь сбалансировать классы, поскольку стоимость, связанная с неправильными прогнозами среди классов, не одинакова. Одним из методов была повторная выборка обучающих данных и создание одинаково сбалансированного набора данных, который был больше исходного. Интересно, что когда я это делаю, я склонен получать более точные прогнозы для другого класса (например, когда я уравновешивал данные, я увеличивал количество примеров для положительного класса, но в случае выборочных прогнозов отрицательный класс работал лучше). Кто-нибудь может объяснить вообще, почему это происходит? Если бы я увеличил число примеров для отрицательного класса, получу ли я что-то подобное для положительного класса из выборочных прогнозов (например, более качественных прогнозов)?

Также очень открыты для других мыслей о том, как я могу справиться с несбалансированными данными либо путем введения различных затрат на неправильную классификацию, либо с использованием весов классов в LibSVM (хотя не знаю, как правильно их выбрать / настроить).

Ответы:


6

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

Однако, выбор весов не прост. В принципе, вы можете разработать теоретический вес, который учитывает затраты на неправильную классификацию и различия между обучением, устанавливают операционные вероятности предшествующего класса, но это не даст оптимальной производительности. Лучше всего выбрать штрафы / веса для каждого класса, сводя к минимуму потери (принимая во внимание затраты на неправильную классификацию) путем перекрестной проверки.


Есть ли автоматизированный способ, как это сделать, или есть учащиеся, которые включают эту функциональность?
Vam

Я обычно просто пишу функцию matlab, чтобы оценить потери для определенного набора штрафов, а затем минимизировать их с помощью симплексного алгоритма Nelder-Mead. Я не знаю ни одной библиотеки, в которой это встроено.
Dikran Marsupial

@DikranMarsupial Будет ли поиск по сетке двух переменных слабого поля в задаче с двумя классами эквивалентен тому, что вы делаете с симплексным алгоритмом?
Спейси

@Tarantula Да, точный метод оптимизации относительно не важен, ключевой момент заключается в том, чтобы убедиться, что вы оптимизируете статистику перекрестной проверки, которая вас действительно интересует, для целей вашего приложения (т. Е. Частоты тех же классов, которые встречаются при оперативном использовании). и принимая во внимание расходы на неправильную классификацию, если они известны).
Дикран Marsupial
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.