2012-07-22 31 views
0

我正在研究需要应用支持向量回归(SVR)的论文,最好使用高斯内核。搜索了一下后,我发现LibSVM可以帮助完成这项任务。然而,我面临着很多困难:我不确定如何做到这一点,使用这个或任何其他类似的库,如何根据经验决定SVR参数(内核带宽,成本和epsilon(松弛变量)),以及如何绘制训练和测试错误。如何使用(或不使用)LibSVM执行支持向量回归

欢迎您提出任何建议。

回答

5

最佳参数将取决于您的数据。您最好的(也可能是唯一的)选项是连续尝试多个参数集,并根据您选择的任何一种度量标准查看哪一个能够为您提供最佳性能。

至于绘制训练和测试错误 - 评估分类器的一种好方法是使用F-measure作为性能指标。这可以让您考虑误报和误报两种错误,并根据您的特定领域对其进行适当的权衡。如果你的意思是绘制训练和测试错误,请澄清。

编辑:响应您的评论

LIBSVM不知道如何优化自己的参数,或者 - 这就是为什么你需要为它提供的参数作为参数传递给svm_train功能。您需要通过实验优化您自己的参数,并且要做到这一点,您需要对性能进行单一的定量测量。我不确定30值问题是什么意思,但是您应该能够通过创造性地重新定义真正的积极的,错误的积极的,真实的消极的和错误的消极的方式来使用F-measure。

您有两种选择:一种更全面,另一种计算更便宜。您可以使用三层嵌套循环来测试gamma,C和epsilon的各种可能组合,选择导致测试数据性能最高的参数(我建议使用交叉验证以避免过度拟合到特定测试数据),或者你可以连续地优化每一个 - 首先,给定一些平淡的,默认的C和epsilon,迭代许多gamma值直到你找到最好的;然后对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对于epsilon,我不确定伽玛),并获得您使用的性能测量的均值和标准偏差。然后,您可以判断给定的绩效指标在统计​​上是否明显优于次优,或者仅使用默认参数。

+0

你能帮我一下如何使用这个库吗?我现在只是有点专注于......另外,你有没有提示如何让应用程序自动选择最佳值(例如,通过编写一个特殊的设计迭代过程)。最后,关于绘图问题,我不确定F-measure会如我所料,因为我正在寻找30值解决方案,而不仅仅是一个值。你怎么看? – user706838 2012-07-22 01:32:50

相关问题