C# C参数不影响libsvm的精度

C# C参数不影响libsvm的精度,c#,svm,libsvm,C#,Svm,Libsvm,在使用libsvm,尤其是它的C#实现时,我面临着一种奇怪的情况。我执行网格搜索以检测参数C的最佳值(我使用的是线性核)。然而,似乎尝试的第一个C值设置了机器的精度:网格搜索尝试的所有其他值都会产生相同的精度,除非我在不同的无序数据集上重新运行搜索 这让我很困惑。有人知道是什么导致了这种行为吗?我对支持向量机很陌生,所以我可能忽略了一些显而易见的东西。谢谢 编辑:我调用的方法如下: ParameterSelection.Grid(问题、训练、问题、验证、参数、最小值、最大值、步长、输出电流、输出

在使用libsvm,尤其是它的C#实现时,我面临着一种奇怪的情况。我执行网格搜索以检测参数C的最佳值(我使用的是线性核)。然而,似乎尝试的第一个C值设置了机器的精度:网格搜索尝试的所有其他值都会产生相同的精度,除非我在不同的无序数据集上重新运行搜索

这让我很困惑。有人知道是什么导致了这种行为吗?我对支持向量机很陌生,所以我可能忽略了一些显而易见的东西。谢谢

编辑:我调用的方法如下:
ParameterSelection.Grid(问题、训练、问题、验证、参数、最小值、最大值、步长、输出电流、输出精度、输出tmp模型)
这是一个我构建的方法,类似于库提供的现有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);
            }
        }
    }
公共静态无效网格(问题培训、问题验证、参数参数、双最小值c、双最大值c、双步骤c、输出双c、,
out双精度,out模型最佳(U模型)
{
C=0;
准确度=0;
最佳_模型=null;
double maxScore=double.MinValue;
对于(双指数=最小值;指数<最大值;指数+=步长)
{
参数C=指数;
模型=Training.Train(训练,参数);
双重测试=预测。预测(验证、空、模型、假);
WriteLine(“{0}{1}”,parameters.C,test);
如果(测试>最大分数)
{
C=参数C;
maxScore=测试;
准确度=测试;
最佳_模型=模型;
Debug.WriteLine(“新的最大值!C=“+C”);
}
}
}

您可以在网格搜索中发布一些代码吗?
测试的值是多少?在每次迭代中它是否接近于零?不,它大约是0.8(振荡取决于数据集的当前顺序)。但是,它在每次迭代中都保持不变。你试过了吗?你正在检查的C值是什么?最明显的原因是您尝试的值范围太窄。事实上,它看起来是这样的,因为C的最常见的选择是a^i的形式,而不是i*a(你现在使用的)你能用网格搜索发布一些代码吗?测试的值是多少?在每次迭代中它是否接近于零?不,它大约是0.8(振荡取决于数据集的当前顺序)。但是,它在每次迭代中都保持不变。你试过了吗?你正在检查的C值是什么?最明显的原因是您尝试的值范围太窄。事实上,它看起来是这样的,因为C的最常见的选择是a^i的形式,而不是i*a(你现在使用的)