zeb*_*bra 4 c++ machine-learning svm visual-studio-2010 visual-studio
似乎每个C++的SVM库都是
是否有任何支持自定义内核的SVM库可用于Visual Studio(特别是2010)?
就像我说的那样,根据你的需要修改libsvm很容易,这里的解释如下:http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f418
由于我不熟悉这两个内核,我只是从Google复制了公式.我希望我把它们弄好:D
A.直方图交集核(太糟糕的SO不会渲染Latex):SUM(min(x_i,y_i)) - >我们可以改变线性内核并将其转换为这个,所以,基本上,在版本3.12(最新在svm.cpp中:
- >第233行返回点(x [i],x [j]); - 你只需要从Kernel :: dot方法复制代码并相应地更改它,所以像这样:
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;
Run Code Online (Sandbox Code Playgroud)
(对于普通测试文件,x应该与y具有相同的长度.我认为当测试或模型文件包含值为0的属性时,else分支存在于特殊情况,可以省略,但是如果libsvm产生预期的结果,则线性内核,然后它也可以正常使用这个修改后的内核
- >第322行返回点(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;
Run Code Online (Sandbox Code Playgroud)
- > 322行 - 与上述相同
PS:上面的代码是用记事本编写的,未经测试.如果它不起作用,请不要杀了我,你必须花两周时间调试神秘的C代码.[sarcasm]对我而言,这是第一次尝试.[/ sarcasm]然而,一旦你理解了工作流程,你可以通过在这两个地方放置断点来轻松调试它.如果您遇到问题,我很乐意提供更多帮助,所以如果您遇到困难,请告诉我.
归档时间: |
|
查看次数: |
847 次 |
最近记录: |