libsvm 、特にその C# 実装svm.netを使用しているときに、奇妙な状況に直面しています。パラメータ C の最適な値を検出するためにグリッド検索を実行します (線形カーネルを使用しています)。ただし、試行される C の最初の値がマシンの精度を設定するようです。別の方法でシャッフルされたデータセットで検索を再実行しない限り、グリッド検索で試行される他のすべての値はまったく同じ精度になります。
これは私をかなり困惑させます。誰かがこの動作を引き起こす原因について考えを持っていますか? 私はベクター マシンのサポートにかなり慣れていないので、明らかなことを見落としている可能性があります。ありがとう。
編集:私が呼び出すメソッドは次のとおりです。
ParameterSelection.Grid(problems.training, problems.validation, parameters, MIN_C, .MAX_C,STEP_C, out current_C, out current_accuracy, out tmp_model);
これは、ライブラリによって提供される既存の ParameterSelection.Grid メソッドと同様に構築したメソッドです。より詳細には、コードは次のとおりです。
public static void Grid(Problem training, Problem validation, Parameter parameters, double min_c, double max_c, double step_c, out double C,
out double accuracy, out Model best_model)
{
C = 0;
accuracy = 0;
best_model = null;
double maxScore = double.MinValue;
for (double index = min_c; index < max_c; index += step_c)
{
parameters.C = index;
Model model = Training.Train(training, parameters);
double test = Prediction.Predict(validation, null, model, false);
Console.WriteLine("{0} {1}", parameters.C, test);
if (test > maxScore)
{
C = parameters.C;
maxScore = test;
accuracy = test;
best_model = model;
Debug.WriteLine(" New Maximum! C =" + C);
}
}
}