C++用のすべてのSVMライブラリはどちらかであるようです
- カスタムカーネルの禁止または
- Linux専用であり、VisualStudioで使用するのは大変な苦痛です。
カスタムカーネルをサポートし、Visual Studio(具体的には2010)で使用できるSVMライブラリは現在利用できますか?
C++用のすべてのSVMライブラリはどちらかであるようです
カスタムカーネルをサポートし、Visual Studio(具体的には2010)で使用できるSVMライブラリは現在利用できますか?
私が言ったように、必要なものに合わせてlibsvmを変更するのは簡単です。説明は次のとおりです。http ://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f418
私はこれらの2つのカーネルに精通していないので、Googleから数式をコピーしました。私はそれらを正しくしたことを願っています:D
A.ヒストグラム交差カーネル(SOが悪すぎるとラテックスがレンダリングされません):SUM(min(x_i、y_i))->線形カーネルを変更してこれに変換できるので、基本的にバージョン3.12(最新)バージョン)、svm.cpp内:
->233行目returndot(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;
(通常のテストファイルの場合、xはyと同じ長さである必要があります。テストファイルまたはモデルファイルに値0の属性が含まれている場合、elseブランチが存在すると思います。これは省略できますが、libsvmが期待される結果を生成する場合は線形カーネルの場合、この変更されたカーネルでも問題なく動作します)
->322行目returndot(x、y); - 同上
B.カイ2乗カーネル: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コードのデバッグに2週間を費やす必要がある場合は、私を殺さないでください。[sarcasm]私にとっては最初の試行から機能しました。[/sarcasm]それでも、ワークフローを理解すれば、これら2つの場所にブレークポイントを設定することで簡単にデバッグできます。問題が発生した場合は、さらにサポートを提供させていただきますので、行き詰まった場合はお知らせください。