【发布时间】:2012-07-20 18:26:52
【问题描述】:
我正在撰写一篇需要应用支持向量回归 (SVR) 的论文,最好使用高斯核。经过一番搜索,我发现 LibSVM 可以帮助完成这项任务。
但是,我面临不少困难:我不确定如何使用这个库或任何其他类似库,如何凭经验确定 SVR 参数(内核带宽、成本和 epsilon(松弛变量)) ),以及如何绘制训练和测试错误。
欢迎所有建议。
【问题讨论】:
标签: matlab vector regression libsvm
我正在撰写一篇需要应用支持向量回归 (SVR) 的论文,最好使用高斯核。经过一番搜索,我发现 LibSVM 可以帮助完成这项任务。
但是,我面临不少困难:我不确定如何使用这个库或任何其他类似库,如何凭经验确定 SVR 参数(内核带宽、成本和 epsilon(松弛变量)) ),以及如何绘制训练和测试错误。
欢迎所有建议。
【问题讨论】:
标签: matlab vector regression libsvm
最佳参数取决于您的数据。您最好的(也许是唯一的)选择是连续尝试多个参数集,看看哪个参数集可以提供最佳性能,无论您选择哪种指标。
至于绘制训练和测试错误 - 评估分类器的一个好方法是使用 F 度量作为性能指标。这使您可以同时考虑误报和误报错误,并根据您的特定域对它们进行加权。如果您通过绘制训练和测试错误来表示其他意思,请澄清。
编辑:回应您的评论
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 和 epsilon 的 1E-9,我不确定 gamma)并获得您使用的性能测量的平均值和标准差。然后,您可以判断给定的性能度量在统计上是否明显优于次优,或者仅使用默认参数。
【讨论】: