[英]C++ support vector machine (SVM) template libraries?
我有來自自定義抽象對象和自定義距離函數的數據集。 有什么好的SVM庫可以讓我訓練自定義對象(不是2d點)和自定義距離函數嗎?
我在類似的stackoverflow問題中搜索了答案,但是沒有一個允許我使用自定義對象和距離函數。
首先是第一件事。
SVM 在距離功能上不起作用 ,它僅接受點積 。 因此,您的距離函數(實際上是相似的,但通常1距離是相似的)必須:
s(a,b)=s(b,a)
s(a,a)>=0, s(a,a)=0 <=> a=0
s(ka, b) = ks(a,b)
和s(a+b,c) = s(a,c) + s(b,c)
是線性的 這可能很難檢查,因為您實際上會問“從我的對象到某個矢量空間是否有函數phi,使得s(phi(x), phi(y))
”是一個點積,因此導致定義所謂的內核 , K(x,y)=s(phi(x), phi(y))
。 如果您的對象本身就是向量空間的元素,則有時將phi(x)=x
放置為K=s
就足夠了,但是通常這是不正確的。
一旦具有這種相似性,幾乎所有SVM庫(例如libSVM
)都可以提供Gram矩陣 。 簡稱為
G_ij = K(x_i, x_j)
因此需要O(N^2)
內存和時間。 因此,您的對象無關緊要,因為SVM僅適用於成對的點積 ,僅此而已。
如果您尋找合適的數學工具來顯示此屬性,那么可以做的是從相似性中尋找內核學習 。 這些方法能夠創建行為類似於您的相似性的有效內核。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.