Я хочу использовать SVM с ядром хи-квадрат для приложения, которое я пишу, но не представляется очевидным, как я могу это применить.
Я определяю ядро как K(x_i, x_j) = exp( -1/A * D(x_i, x_j))
, где A
это параметр масштабирования, который я могу выбрать, и D(x_i, x_j)
это расстояние хи-квадрат между ними.
Как это может быть сделано? Это широко распространенное ядро в литературе по компьютерному зрению, поэтому было бы удивительно, если бы это было невозможно.
Я не думаю, что есть опция для хи-квадрат или пользовательское ядро в opencv.
Поэтому одним из вариантов является использование другой библиотеки SVM.
это является модификацией LIBSVM, которая поддерживает ядро хи-квадрат (другое), а также предварительно вычисленные ядра. Но его предназначено для использования с Matlab. Поэтому я не уверен, сколько нужно, чтобы заставить его работать с C ++.
Другим вариантом может быть использование линейного SVM и преобразование ваши данные приближаются к ядру хи-квадрат, если вы хотите придерживаться OpenCV SVM.
это ответ может также дать вам еще несколько советов.
В OpenCV 3.0.0.0dev есть реализация. Смотрите ссылку для деталей.
http://docs.opencv.org/master/modules/ml/doc/support_vector_machines.html
Новая ссылка:
http://docs.opencv.org/3.0-beta/modules/ml/doc/support_vector_machines.html