SVM для несбалансированных данных


15

Я хочу попытаться использовать машины опорных векторов (SVM) в моем наборе данных. Перед тем, как попытаться решить проблему, меня предупредили, что SVM плохо работают с крайне несбалансированными данными. В моем случае у меня может быть 95-98% 0 и 2-5% 1.

Я пытался найти ресурсы, в которых говорилось об использовании SVM для разреженных / несбалансированных данных, но все, что я мог найти, это «sparseSVM» (которые используют небольшое количество векторов поддержки).

Я надеялся, что кто-нибудь сможет кратко объяснить:

  1. Насколько хорошо SVM можно ожидать с таким набором данных?
  2. Какие, если таковые имеются, модификации должны быть сделаны для алгоритма SVM
  3. Какие ресурсы / документы обсуждают это

Ответы:


15

Многие реализации SVM решают эту проблему, назначая разные веса положительным и отрицательным экземплярам. По сути, вы взвешиваете образцы так, чтобы сумма весов для положительных значений была равна сумме отрицательных значений. Конечно, при оценке SVM вы должны помнить, что если 95% данных являются отрицательными, тривиально получить точность 95%, всегда прогнозируя отрицательные значения. Таким образом, вы должны убедиться, что ваши показатели оценки также взвешены, чтобы они были сбалансированы.

В частности, в том libsvm, который вы добавили в качестве тега, есть флаг, который позволяет вам установить вес классов ( -wя полагаю, но проверьте документы ).

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


Обыграй меня :-)
Марк Клазен,

@ У меня та же проблема с несбалансированными данными, и я получаю точность 99%. Я использовал веса в libsvm. Вы упомянули, что показатели оценки также должны быть взвешенными. Я хотел знать, как мы можем оценить показатели оценки.
Хани Гок

1
@HaniGoc в основном вы хотите отдельно рассчитать точность для каждого класса и взять среднее значение этого. Так, например, если у вас есть 10 классов A и 90 классов B, и вы догадались, что все образцы относятся к классу B, в стандартной точности у вас будет 90/100знак равно0.90,5*(0/10+90/90)знак равно0,5

7

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


5

В случае таких редких данных SVM будет хорошо работать.

Как утверждает @Bitwise, вы не должны использовать точность для измерения производительности алгоритма.

Вместо этого вы должны рассчитать точность, вспомнить и F-Оценка алгоритма.


Можете ли вы расширить ваши рассуждения? Кроме того, как бы вы оценили F-показатель после завершения классификации (в тестовом наборе)? Спасибо
Спейси

Чтобы измерить FScore на тестовом наборе, вам нужно будет вручную классифицировать его, а затем вычислить отзыв и точность, используя ручные данные по сравнению с предсказанными данными. Что бы вы хотели, чтобы я расширил, почему SVM хорошо работает с разреженными данными?
alexandrekow

Да, почему SVM работает с разреженными данными, было бы неплохо. Спасибо
Спейси

«Простое наличие разреженных элементов не представляет никакой проблемы для SVM. Один из способов убедиться в этом состоит в том, что вы можете сделать случайное вращение координатных осей, что оставит проблему неизменной и даст такое же решение, но сделает данные полностью разрежены (отчасти так работают случайные проекции »( stats.stackexchange.com/questions/23470/… )
alexandrekow
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.