似乎每次SVM庫,用於C++或者是是否有支持,可以使用Visual Studio C++中使用自定義內核的任何SVM庫?
- 如果不允許自定義內核或
- Linux的排斥,將是一個神聖的痛苦與Visual Studio使用。
是否有任何支持自定義內核並可在Visual Studio(特別是2010)中使用的SVM庫?
似乎每次SVM庫,用於C++或者是是否有支持,可以使用Visual Studio C++中使用自定義內核的任何SVM庫?
是否有任何支持自定義內核並可在Visual Studio(特別是2010)中使用的SVM庫?
就像我說的,很容易修改爲LIBSVM您需要什麼,這裏的解釋:http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f418
由於我不熟悉這兩個內核,我只是複製從谷歌的公式。我希望我弄明白了:D
A.直方圖交點內核(太糟糕了,不會渲染Latex):SUM(min(x_i,y_i)) - >我們可以更改線性內核並將其轉換爲這一項,所以,基本上,在3.12版本(最新版本),在svm.cpp:
- >線233的返回點(X [I]中,x [j]); - 你只需要代碼從內核::點方法複製並相應地改變,所以是這樣的:
double sum = 0;
while(x->index != -1 && y->index != -1)
{
if(x->index == y->index)
{
sum += min(x->value, y->value);
++x;
++y;
}
else
{
if(x->index > y->index)
++x;
else
++y;
}
}
return sum;
(正常的測試文件,x應具有相同的長度爲y我認了。如果測試或模型文件包含值爲0的屬性(可以省略),則存在特殊情況的分支,但是如果libsvm使用線性內核產生預期結果,那麼它對此修改後的結果也將工作正常)
- >第322行return dot(x,y); - 與上面相同
B.卡方內核:SUM((2 x_i y_i)/(x_i + y_i)) - 好吧,我們來看看......我想我們可以再次嘗試修改線性內核(也許一些優化的RBF的可以在這種情況下被利用,但讓我們忽略現在):
- >線233變爲:
double sum = 0;
while(x->index != -1 && y->index != -1)
{
if(x->index == y->index)
{
sum += 2 * x->value * y->value/(x->value + y->value);
++x;
++y;
}
else
{
if(x->index > y->index)
++x;
else
++y;
}
}
return sum;
- >線322 - 同上
PS:上面的代碼是用記事本編寫的,未經測試。如果它不起作用,請不要殺了我,並且您必須花費兩週時間調試隱藏的C代碼。 [諷刺]對於我來說,從第一次嘗試工作。[/諷刺]然而,你可以很容易,一旦你瞭解了工作流程,通過把破發點,在這兩個地方進行調試。如果遇到問題,我很樂意提供更多幫助,所以如果您遇到困難,請告訴我。
真棒,感謝您的參考和所有的努力。這是修改libsvm的好腳步。很好的答案。 – zebra
不客氣:)(我不會介意,如果你還給予好評的答案:P) –
你需要什麼內核?在libsvm中,實現它們中的大部分都很簡單,雖然很煩人,您必須更改庫中的代碼才能執行它。 –
卡方和直方圖相交。超級簡單的內核可以實現,但將它們添加到libsvm似乎並不重要。 – zebra