Написать кастомное ядро ​​для svm в R

Я хочу использовать функцию svm() пакета e1071 в R. Я новичок в этом пакете, и мне было интересно, можно ли написать собственное пользовательское ядро, вызываемое в svm(). Я вижу, что есть несколько предустановленных ядер, но я не вижу ядра с косинусным сходством, которое мне и нужно.

В качестве альтернативы, есть ли другой пакет в R, позволяющий запускать SVM с ядром косинусного сходства?


person user162381    schedule 06.03.2017    source источник


Ответы (1)


Плохая новость в том, что в настоящее время он не поддерживается в e1071. Много лет назад это обсуждалось https://stat.ethz.ch/pipermail/r-help/2002-July/023299.html.

Хорошей новостью является то, что ядро ​​сходства косинусов определяется как

K(x, y) = <x, y> / (||x|| ||y||) = <x / ||x||, y / ||y||>

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

Если вы хотите проводить исследования с помощью настраиваемых моделей машинного обучения, R, вероятно, не подходит (поскольку это скорее инструмент для применения существующих методов, чем хорошо спроектированная система разработки — если вы хотите что-то нестандартное в R вам в основном нужно перейти на уровень С++). Вместо этого вы можете рассмотреть python и многочисленные библиотеки (такие как scikit-learn + pykernels), которые дают вам гораздо больше гибкости.

person lejlot    schedule 06.03.2017