【问题标题】:Optimal sigma for the RBF kernel?RBF内核的最佳sigma?
【发布时间】:2018-05-04 21:59:24
【问题描述】:

如何为 RBF 内核选择最佳 sigma?

我正在使用单个类的分类器, 以什么为基础,采用什么参数

【问题讨论】:

    标签: svm


    【解决方案1】:

    取决于您使用的是哪种机器学习平台。 如果您使用的是 Weka,则可以使用“网格搜索”选项来找出最佳分类参数。 (即对于线性内核,它为您提供成本函数,对于 RBF-SVM,它提供 sigma/gamma 和 C 等)

    http://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html

    如果您使用的是 Python,我通常会以小步数迭代 sigma 值,并在每一步上提高分类精度。然后我选择导致最佳准确性的 sigma。 另请注意,如果您针对给定的分类任务优化 SVM 参数,则存在过拟合的风险。但是,迭代步骤更改应该让您更好地了解过度拟合发生的位置(如果有的话!)。

    祝你好运!

    【讨论】:

      【解决方案2】:

      我建议你使用某种Grid-Search。这是一种同时评估两个参数的性能的技术。对于您的 SVM,有 sigmaC。因此,您对参数空间执行详尽搜索,其中每个轴代表一个参数,其中一个点是两个参数值的元组(C_i, sigma_i)

      因此,要执行它,您只需为C{C_1,..., C_n}sigma{sigma_1,..., sigma_n} 选择一组,然后针对两组(C_i, sigma_i) 中的每对参数进行训练和测试。

      这实际上需要很长时间,所以我建议您尝试类似的方法:

      LibSVM 例如提供K-Fold Cross-Validation,因此请绘制一组sigma 值,定义一个固定的K(可能是5 到10)并运行交叉验证以获得C 的良好估计值。记录C 参数和准确度分数。将此应用于sigma 值集的所有元素后,选择在每个交叉验证过程中实现最高准确度的参数对。

      注意: 我建议你不要使用 SVM 来解决一类问题。即使有正式的定义,基本的 SVM 算法也需要两个类来确定最佳边界。因此,我建议您创建一个catch-all 类并将您的一类问题转换为二类问题。

      【讨论】:

      • 您只需使用 google 即可回答所有问题。请开始学习该主题。
      • 我不知道如何为oneClass制定数据,我对一对一和一对一感到困惑,请帮助我!
      • 我告诉过你:不要使用一类 svm。你在不需要的情况下使用它。您尝试解决 XOR,这是一个二进制问题,因此可以使用基本的 svm。一对多仅适用于多类问题(超过两个类)。您只需使用 google 即可找到此类答案。
      • in github.com/techfort/classify-text/blob/master/node_modules/… 用 C_SVC 多类分类器解决 xor 问题