RBF 内核的最佳西格玛?
Optimal sigma for the RBF kernel?
如何为 RBF 核选择最佳的 sigma?
我正在使用单个 class 的 class 转换器,
以什么为基础,采用什么参数
取决于您使用的是哪种机器学习平台。
如果您使用的是 Weka,则有一个可用的 "grid search" 选项可以吐出最佳分类参数。 (即对于线性内核,它给你成本函数,对于 RBF-SVM,它给出 sigma/gamma 和 C 等)
http://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html
如果您使用的是 Python,我通常会以较小的步长迭代 sigma 值,并在每一步中确保乳头分类准确度。然后我选择导致最佳准确度的西格玛。
另请注意,如果您针对给定的分类任务优化 SVM 参数,您 运行 会面临过度拟合的风险。但是,迭代步骤更改应该可以让您更好地了解发生过度拟合的位置(如果有的话!)。
祝你好运!
我建议您使用某种 Grid-Search。这是一种同时评估两个参数性能的技术。对于您的 SVM,有 sigma
和 C
。因此,您对参数 space 执行详尽搜索,其中每个轴代表一个参数,其中的一个点是两个参数值 (C_i, sigma_i)
.
的元组
因此,要执行它,您只需为 C
:{C_1,..., C_n}
和 sigma
:{sigma_1,..., sigma_n}
选择一个集合,然后训练并随后对每一对进行测试两组中的参数 (C_i, sigma_i)
。
这实际上需要相当长的时间,所以我建议您尝试类似的方法:
LibSVM for example offers K-Fold Cross-Validation,所以画一组sigma
值,定义一个固定的K
(可能5到10)和运行交叉验证得到一个好的C
的估计。记录 C
参数和准确度分数。将此应用于 sigma
值集的所有元素后,选择在每个交叉验证过程中达到最高精度的参数对。
注:
我建议你不要用 SVM 来解决 one-class 的问题。即使有正式定义,基本 SVM 算法也需要两个 class 来确定最佳边界。因此,我建议您创建一个 catch-all
class 并将您的一个 class 问题转换为两个 class 问题。
如何为 RBF 核选择最佳的 sigma?
我正在使用单个 class 的 class 转换器, 以什么为基础,采用什么参数
取决于您使用的是哪种机器学习平台。 如果您使用的是 Weka,则有一个可用的 "grid search" 选项可以吐出最佳分类参数。 (即对于线性内核,它给你成本函数,对于 RBF-SVM,它给出 sigma/gamma 和 C 等)
http://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html
如果您使用的是 Python,我通常会以较小的步长迭代 sigma 值,并在每一步中确保乳头分类准确度。然后我选择导致最佳准确度的西格玛。 另请注意,如果您针对给定的分类任务优化 SVM 参数,您 运行 会面临过度拟合的风险。但是,迭代步骤更改应该可以让您更好地了解发生过度拟合的位置(如果有的话!)。
祝你好运!
我建议您使用某种 Grid-Search。这是一种同时评估两个参数性能的技术。对于您的 SVM,有 sigma
和 C
。因此,您对参数 space 执行详尽搜索,其中每个轴代表一个参数,其中的一个点是两个参数值 (C_i, sigma_i)
.
因此,要执行它,您只需为 C
:{C_1,..., C_n}
和 sigma
:{sigma_1,..., sigma_n}
选择一个集合,然后训练并随后对每一对进行测试两组中的参数 (C_i, sigma_i)
。
这实际上需要相当长的时间,所以我建议您尝试类似的方法:
LibSVM for example offers K-Fold Cross-Validation,所以画一组sigma
值,定义一个固定的K
(可能5到10)和运行交叉验证得到一个好的C
的估计。记录 C
参数和准确度分数。将此应用于 sigma
值集的所有元素后,选择在每个交叉验证过程中达到最高精度的参数对。
注:
我建议你不要用 SVM 来解决 one-class 的问题。即使有正式定义,基本 SVM 算法也需要两个 class 来确定最佳边界。因此,我建议您创建一个 catch-all
class 并将您的一个 class 问题转换为两个 class 问题。