Я изучаю Support Vector Machine последние несколько недель. Я понимаю теоретическую концепцию, как я могу классифицировать данные на два класса. Но мне неясно, как выбрать опорный вектор и создать разделительную линию для классификации новых данных с использованием C ++.
Предположим, у меня есть два набора тренировочных данных для двух классов
После построения данных я получаю следующее пространство объектов с вектором, и здесь разделительная линия также ясна.
Как реализовать это в C ++ без библиотечных функций. Это поможет мне прояснить мою концепцию реализации SVM. Мне нужно четко понимать реализацию, так как я собираюсь применить SVM для анализа мнений для моего родного языка.
Я присоединюсь к советам большинства людей и скажу, что вам стоит подумать об использовании библиотеки. Алгоритм SVM достаточно сложен, чтобы добавить шум, если что-то не работает из-за ошибки в вашей реализации. Даже не говоря о том, как сложно сделать масштабируемую реализацию как по объему памяти, так и по времени.
Тем не менее, и если вы хотите изучить это просто как учебный опыт, то SMO, вероятно, ваш лучший выбор. Вот некоторые ресурсы, которые вы можете использовать:
Упрощенный алгоритм SMO — материал Стэнфорда PDF
Быстрое обучение машин опорных векторов — PDF
Вероятно, наиболее практичное объяснение, которое я нашел, — это то, что приведено в главе 6 книги «Машинное обучение в действии» Питера Харрингтона. Сам код написан на Python, но вы должны быть в состоянии перенести его на C ++. Я не думаю, что это лучшая реализация, но она может быть достаточно хорошей, чтобы иметь представление о том, что происходит.
Код находится в свободном доступе:
https://github.com/pbharrin/machinelearninginaction/tree/master/Ch06
К сожалению, нет примера для этой главы, но многие местные библиотеки, как правило, имеют эту книгу в наличии.