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