Помогите мне понять опорные векторные машины

76

Я понимаю основы цели машин опорных векторов с точки зрения классификации входного набора на несколько разных классов, но я не понимаю некоторые мелкие детали. Для начала, я немного смущен использованием Slack Variables. Какова их цель?

Я занимаюсь классификационной проблемой, когда я снимал показания давления с датчиков, которые я поместил на стельку обуви. Объект будет сидеть, стоять и ходить пару минут, пока записываются данные о давлении. Я хочу обучить классификатора, чтобы он мог определить, сидит ли человек, стоит или идет и может сделать это для любых будущих данных испытаний. Какой тип классификатора мне нужно попробовать? Каков наилучший способ обучения классификатора на основе собранных данных? У меня есть 1000 записей для сидя, стоя и ходьбы (всего 3x1000 = 3000), и все они имеют следующую векторную форму объекта. (давление от датчика 1, давление от датчика 2, давление от датчика 3, давление от датчика 4)

rohanbk
источник
Смотрите также: stats.stackexchange.com/questions/23391/…

Ответы:

103

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

Теперь остались некоторые проблемы.
Прежде всего, что делать с этими отвратительными выбросами, которые бесстыдно лежат в центре облака точек другого класса?
альтернативный текст
С этой целью мы позволяем оптимизатору оставить некоторые образцы неправильно помеченными, но наказать каждый из таких примеров. Чтобы избежать многоцелевой оптимизации, штрафы за неправильно маркированные случаи объединяются с размером маржи с использованием дополнительного параметра C, который контролирует баланс между этими целями.
Далее, иногда проблема просто не линейна и не может быть найдена хорошая гиперплоскость. Здесь мы вводим трюк с ядром - мы просто проецируем исходное нелинейное пространство на многомерное с некоторым нелинейным преобразованием, конечно же, определенным набором дополнительных параметров, надеясь, что в результирующем пространстве задача подойдет для простого SVM:

альтернативный текст

Еще раз, с некоторой математикой, и мы можем видеть, что вся эта процедура преобразования может быть элегантно скрыта путем модификации целевой функции путем замены точечного произведения объектов на так называемую функцию ядра.
Наконец, это все работает для 2 классов, и у вас есть 3; Что с этим делать? Здесь мы создаем 3 2-классных классификатора (сидя - не сидя, стоя - не стоя, ходя - не гуляя) и в классификации объединяем их с голосованием.

Итак, проблемы, кажется, решены, но мы должны выбрать ядро ​​(здесь мы консультируемся с нашей интуицией и выбрать RBF) и установить хотя бы несколько параметров (ядро C +). И у нас должна быть целевая функция, безопасная для нахождения, например аппроксимация ошибок из перекрестной проверки. Поэтому мы оставляем компьютер работающим над этим, идем на кофе, возвращаемся и видим, что есть некоторые оптимальные параметры. Большой! Теперь мы просто запускаем вложенную перекрестную проверку, чтобы получить приблизительную ошибку и вуаля.

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


источник
5
(+1) Здорово, что вы добавили несколько фотографий, чтобы проиллюстрировать все это!
хл
3
@mbq Поскольку вы, кажется, очень компетентны в SVM, позвольте мне попросить вас прояснить мои сомнения: как только мы найдем лучшую разделяющую гиперплоскость, для чего мы ее используем? Мы можем определить SVM как метод, который, во-первых, выбирает лучшую гиперплоскость для правильной классификации точек данных, и, во-вторых, он использует эту гиперплоскость для разделения новых точек данных в двух классах. Правильно? (У меня есть некоторые сомнения по поводу второй части)
DavideChicco.it
3
@ DavideChicco.it По сути, основная проблема всей ОД заключается в создании модели, которая будет надежно предсказывать новые данные, так что да.