选择C和gamma值

9

你好,我正在使用SMO进行SVM分类,其中我的内核是RBF,现在我想使用网格搜索和交叉验证选择csigma值。由于我对内核函数很新,请您提供一步一步的帮助。

4个回答

18
  1. 选择一些你认为有趣的C和sigma值。例如,C = {1, 10, 100, 1000},sigma = {.01, .1, 1}(这只是举个例子)。
  2. 将训练集分成k个部分(例如10个),最好是按照分层的方式进行。
  3. 循环遍历所有C和sigma值对。
    1. 循环遍历你的训练集的所有k个部分。保留第k个部分。在其它所有部分上训练分类器,然后在保留的部分上进行测试。
    2. 跟踪一些分数(准确度、F1或者任何你想优化的指标)。
  4. 通过刚刚计算的分数返回C和sigma的最佳性能值对。

澄清一下:“在其他部分上训练分类器”通常意味着将其组合在一起进行训练,而不是每个部分单独训练。 - Danica
@Dougal:是的,那就是我想说的。谢谢。 - Fred Foo
我认为值得注意的是,你所提到的(将其分成k个部分等)被称为交叉验证,具体来说是10折交叉验证。原帖可能不知道这一点,有时候寻找更多信息最困难的部分就是知道要搜索哪些关键词。 - karenu
你好,感谢你的回答。但是请问你能告诉我如何编写代码吗? - pradeep deep
5
我刚刚给了你算法,你需要自己编写代码。 - Fred Foo
这将简化事情:如果在Python中使用scikit-learn,则可以使用GridSearch交叉验证。您可以指定不同的参数和值以及交叉验证值(例如:5)。然后,您可以获得估计器的最佳分数和最佳参数。这与上面的回答完全相同,但是适用于Python。 - MANU

4

1

我只是想对larsmans的回答稍作解释。

C参数是正则化/松弛参数。它较小的值会使权重变小。随着C变得越来越大,权重的允许范围也变得更宽。因此,更大的C值增加了分类错误的惩罚,从而减少了训练数据的分类误差率(这可能导致过度拟合)。随着C的增加,你的训练时间和支持向量数量也会增加。

你也可能会发现阅读将SVM扩展为软边界分类器 by K.K. Chin有用。


0

您还可以使用统一设计模型选择来减少需要检查的元组数量。解释它的论文是“通过统一设计的支持向量机模型选择”由黄建明撰写。

一些Python实现已经存在于ssvm 0.2中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接