Библиотеки шаблонов с поддержкой векторного C ++ (SVM)?

У меня есть набор данных из пользовательских абстрактных объектов и пользовательской функции расстояния. Есть ли какие-нибудь хорошие библиотеки SVM, которые позволяют мне тренироваться на моих пользовательских объектах (не на 2d точках) и на моей специальной функции расстояния?

Я искал ответы в этот похожий вопрос, но ни один из них не позволяет мне использовать пользовательские объекты и функции расстояния.

0

Решение

Обо всем по порядку.

SVM не работает на дистанционных функциях, он принимает только точечные продукты. Таким образом, ваша функция расстояния (на самом деле сходство, но обычно 1-расстояние — это сходство) должна:

  • быть симметричным s(a,b)=s(b,a)
  • быть положительно определенным s(a,a)>=0, s(a,a)=0 <=> a=0
  • быть линейным в первом аргументе s(ka, b) = k s(a,b) а также s(a+b,c) = s(a,c) + s(b,c)

Это может быть сложно проверить, так как вы на самом деле спрашиваете «есть ли функция от моих объектов до некоторого векторного пространства, фи такого, что s(phi(x), phi(y))«является точечным произведением, что приводит к определению так называемого ядро, K(x,y)=s(phi(x), phi(y)), Если ваши объекты сами являются элементами векторного пространства, то иногда достаточно поставить phi(x)=x таким образом K=s, но это не совсем так.

Если у вас есть такое сходство практически с любой библиотекой SVM (например, libSVM) работает с обеспечением Граммовая матрица. Который просто определяется как

G_ij = K(x_i, x_j)

Таким образом, требуя O(N^2) память и время. Следовательно, не имеет значения, какие у вас объекты, так как SVM работает только на попарные точечные произведения, ничего более.

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector