如何使用(或不使用)LibSVM执行支持向量回归

时间:2012-07-22 00:41:50

标签: matlab vector regression libsvm

我正在研究一篇需要应用支持向量回归(SVR)的论文,最好是使用高斯内核。经过一番搜索,我发现LibSVM可以帮助完成这项任务。

但是,我遇到了一些困难:我不确定如何使用这个或任何其他类似的库,如何根据经验确定SVR参数(内核带宽,成本和epsilon(松弛变量)) ),以及如何绘制训练和测试错误。

欢迎所有建议。

1 个答案:

答案 0 :(得分:5)

最佳参数取决于您的数据。您最好的(也许是唯一的)选项是连续尝试多个参数集,并根据您选择的指标查看哪个参数设置为您提供最佳性能。

至于绘制训练和测试错误 - 评估分类器的一种好方法是使用F-measure作为性能指标。这允许您考虑误报和误报错误,并根据您的特定域权重对其进行加权。如果您通过绘制培训和测试错误来表示其他内容,请澄清。

编辑:回复您的评论

LibSVM也不知道如何优化自己的参数 - 这就是为什么你需要提供参数作为svm_train函数的参数。您需要通过实验优化自己的参数,为此,您需要对性能进行一些单一的定量测量。我不确定30值问题是什么意思,但你应该能够通过创造性地重新定义真正的积极,假阳性,真阴性和假阴性来使用F-measure。

您有两种选择:一种更全面,另一种计算更便宜。您可以使用三层嵌套循环来测试gamma,C和epsilon的各种可能组合,选择能够在测试数据上获得最高性能的参数(我建议使用交叉验证来避免过度拟合到特定测试数据),或者你可以连续优化每个 - 首先,给定一些平淡,默认的C和epsilon,迭代许多伽玛值,直到你找到最好的;然后为C和epsilon做同样的事。

如果你想增强第二种方法,那么当你优化每个参数时,使用所有其他参数的最佳值而不是某些默认值,并多次优化每个参数(这样它们可以是在其他参数中连续运行更好的值)。

为了使这两种方法更精确(尽管总是以潜在的过度拟合为代价,请记住),使用伸缩搜索 - 比如你第一次从1到101搜索,步长为10,所以你搜索1,11,21 ...... 101。在你获得51的最佳值之后的下一次运行中,搜索46,47,48,49,50,51,52,53,54,55,56,以便重复使用相同的信息但是变得更加精确。

要使任何一种方法对随机波动不敏感(比如你为交叉验证生成的随机折叠),使用默认参数运行多个交叉验证测试(我会说,好的默认值可能是1.0 C和1E-9 for epsilon,我不确定伽玛)并获得您使用的性能指标的均值和标准差。然后,您可以判断给定的性能度量在统计上是否明显优于次优度,或者仅使用默认参数。