如何使用 libSVM(RBF 内核)在网格搜索后选择 C 和 gamma 以获得最佳泛化效果?
Posted
技术标签:
【中文标题】如何使用 libSVM(RBF 内核)在网格搜索后选择 C 和 gamma 以获得最佳泛化效果?【英文标题】:How to choose C and gamma AFTER grid search using libSVM (RBF kernel) for best possible generalisation? 【发布时间】:2014-11-04 13:42:24 【问题描述】:我知道有很多关于为 SVM(RBF 内核)选择“最佳”C 和 gamma 值的问题。 标准答案是网格搜索,但是,我的问题是在网格搜索结果之后开始的。让我解释一下:
我有一个包含 10 个主题的数据集,我对其执行 leave-one-subject-out-xfold-validation,这意味着我对每个遗漏的主题执行网格搜索。为了不对这些训练数据进行优化,我不想通过构建所有 10 个模型的平均精度并搜索最大值来选择最佳 C 和 gamma 参数。考虑到 xfold 中的一个模型,我可以仅在该模型中的训练数据上执行另一个 xfold(不涉及遗漏的验证主题)。但是你可以想象计算工作量,我没有足够的时间来做这件事。
由于对 10 个模型中的每一个进行网格搜索产生了广泛的良好 C 和 gamma 参数(精度差异仅为 2-4%,参见图 1) 我想到了另一种方式。
我在网格内定义了一个区域,该区域仅包含与该网格的最大精度相差 2% 的精度。差值高于 2% 的所有其他准确度值都设置为零(参见图 2)。 我对每个模型都这样做,并在每个模型的区域之间建立相交。这导致 C 和 gamma 值的区域更小,其精度会在最大值的 2% 以内。每个模型的准确性。不过,范围还是比较大的。 所以我考虑选择具有最低 C 的 C-gamma 对,因为这意味着我离过度拟合最远,更接近良好的泛化。我可以这样争论吗?
我一般如何在 C-gamma 对的这个区域内选择一个 C 和 gamma,所有 10 个模型中的所有这些都证明是我的分类器的可靠调整? 我应该专注于最小化 C 参数吗?还是我应该专注于最小化 C 和 gamma 参数?
我在这里找到了一个相关的答案 (Are high values for c or gamma problematic when using an RBF kernel SVM?),它说高 C 和高 gamma 的组合意味着过度拟合。我知道 gamma 的值会改变数据点周围高斯曲线的宽度,但我仍然无法理解它在数据集中的实际含义。
这篇文章让我想到了另一个想法。我可以使用与数据点数量相关的 SV 数量作为在所有 C-gamma 对之间进行选择的标准吗?低(SV 的数量/数据点的数量)意味着更好的概括? 如果我得到更好的概括(至少从理论上),我愿意降低准确性,因为它不应该影响我感兴趣的结果。
【问题讨论】:
【参考方案1】:因为线性核是 rbf 核的一个特例。有一种方法首先使用线性 SVM 来调整 C。然后双线性调整 C-G 对以节省时间。
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.141.880&rep=rep1&type=pdf
【讨论】:
以上是关于如何使用 libSVM(RBF 内核)在网格搜索后选择 C 和 gamma 以获得最佳泛化效果?的主要内容,如果未能解决你的问题,请参考以下文章