Я думаю, что вы пытаетесь начать с плохого конца. Что нужно знать о SVM, чтобы использовать его, так это то, что этот алгоритм находит гиперплоскость в гиперпространстве атрибутов, которое наилучшим образом разделяет два класса, где лучшее означает с наибольшим запасом между классами (знание того, как это делается, является вашим врагом здесь, потому что он размывает общую картину), как показано на известной картине, подобной этой:
Теперь остались некоторые проблемы.
Прежде всего, что делать с этими отвратительными выбросами, которые бесстыдно лежат в центре облака точек другого класса?
С этой целью мы позволяем оптимизатору оставить некоторые образцы неправильно помеченными, но наказать каждый из таких примеров. Чтобы избежать многоцелевой оптимизации, штрафы за неправильно маркированные случаи объединяются с размером маржи с использованием дополнительного параметра C, который контролирует баланс между этими целями.
Далее, иногда проблема просто не линейна и не может быть найдена хорошая гиперплоскость. Здесь мы вводим трюк с ядром - мы просто проецируем исходное нелинейное пространство на многомерное с некоторым нелинейным преобразованием, конечно же, определенным набором дополнительных параметров, надеясь, что в результирующем пространстве задача подойдет для простого SVM:
Еще раз, с некоторой математикой, и мы можем видеть, что вся эта процедура преобразования может быть элегантно скрыта путем модификации целевой функции путем замены точечного произведения объектов на так называемую функцию ядра.
Наконец, это все работает для 2 классов, и у вас есть 3; Что с этим делать? Здесь мы создаем 3 2-классных классификатора (сидя - не сидя, стоя - не стоя, ходя - не гуляя) и в классификации объединяем их с голосованием.
Итак, проблемы, кажется, решены, но мы должны выбрать ядро (здесь мы консультируемся с нашей интуицией и выбрать RBF) и установить хотя бы несколько параметров (ядро C +). И у нас должна быть целевая функция, безопасная для нахождения, например аппроксимация ошибок из перекрестной проверки. Поэтому мы оставляем компьютер работающим над этим, идем на кофе, возвращаемся и видим, что есть некоторые оптимальные параметры. Большой! Теперь мы просто запускаем вложенную перекрестную проверку, чтобы получить приблизительную ошибку и вуаля.
Этот краткий рабочий процесс, конечно, слишком упрощен, чтобы быть полностью корректным, но он показывает причины, по которым я думаю, что вам следует сначала попробовать использовать случайный лес , который почти независим от параметров, изначально мультиклассовый, обеспечивает беспристрастную оценку ошибок и работает почти так же хорошо, как хорошо подогнанные SVM. ,