0

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

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

欢迎所有建议。

4

1 回答 1

5

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

至于绘制训练和测试错误 - 评估分类器的一个好方法是使用 F 度量作为性能指标。这使您可以同时考虑误报和误报错误,并根据您的特定域对它们进行加权。如果您通过绘制训练和测试错误来表示其他意思,请澄清。

编辑:回应您的评论

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

您有两种选择:一种更全面,另一种计算成本更低。您可以使用三层嵌套循环来测试 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,以便您重复使用相同的信息,但变得更加精确。

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

于 2012-07-22T01:03:17.937 回答