簡體   English   中英

C ++支持向量機(SVM)模板庫?

[英]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僅適用於成對的點積 ,僅此而已。

如果您尋找合適的數學工具來顯示此屬性,那么可以做的是從相似性中尋找內核學習 這些方法能夠創建行為類似於您的相似性的有效內核。

查看以下內容:

  • MLPack :提供許多功能的輕量級庫。
  • DLib :非常流行的工具包,可用於工業和學術界。

除此之外,您還可以使用Python軟件包,但可以從C ++導入它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM