2

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

0 回答 0