我在使用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);
}
}
}