【问题标题】:Issues in Convergence of Sequential minimal optimization for SVM支持向量机的序列最小优化收敛问题
【发布时间】:2011-02-03 10:15:24
【问题描述】:

我已经在支持向量机上工作了大约 2 个月了。我自己编写了 SVM,对于 SVM 的优化问题,我使用了 John Platt 博士的 Sequential Minimal Optimization(SMO)。

现在我正处于进行网格搜索以找到我的数据集的最佳 C 值的阶段。 (请在此处找到我的项目应用程序和数据集详细信息SVM Classification - minimum number of input sets for each class

我已经成功检查了我自定义实现的 SVM 对从 2^0 到 2^6 的 C 值的准确性。但是现在我遇到了一些关于 C> 128 的 SMO 收敛的问题。 就像我试图找到 C=128 的 alpha 值一样,它需要很长时间才能真正收敛并成功给出 alpha 值。

对于 C=100,SMO 收敛所需的时间约为 5 小时。我认为这个巨大(因为 SMO 应该很快。)虽然我得到了很好的准确性? 我搞砸了,不是因为我无法测试更高 C 值的准确性。

我实际上显示了在 SMO 的每次传递中更改的 alpha 数量,并获得 10、13、8... alpha 连续变化。 KKT 条件确保收敛,那么这里发生了什么奇怪的事情?

请注意,尽管执行时间很长,但我的实现在 C

请就这个问题给我意见。

谢谢你,干杯。

【问题讨论】:

  • 我想我之前问过你的其他问题之一,但你为什么不使用现有的 SVM 包?
  • 我想我提到了我自己实现 SVM 的原因。我是技术学士学位的学生,我的学院不允许我使用任何现成的 SVM 实现。坦率地说,因为如果我使用任何东西,我将无法学习有关 SVM 的大部分内容。
  • 不过,将它与您的实现进行比较是值得的。如果 libsvm 在这方面也很慢,那么您肯定没有做错任何事情。

标签: machine-learning smo classification svm convex-optimization


【解决方案1】:

对于大多数 SVM 实现,训练时间会随着 C 值的增大而显着增加。要了解在一个相当好的 SMO 实现中训练时间如何使用 C 扩展,请查看 libSVM 中的 log-scale 行下图。

SVM 训练时间与 C - 来自 Sentelle 等人的 A Fast Revised Simplex Method for SVM Training

alt text http://dmcer.net/StackOverflowImages/svm_scaling.png

您可能有两种简单的方法和一种不太简单的方法来加快速度。

让我们从简单的东西开始。首先,您可以尝试放宽收敛标准。像 epsilon = 0.001 这样的严格标准将需要更长的时间来训练,而通常会导致模型不比像 epsilon = 0.01 这样的宽松标准更好。其次,您应该尝试分析您的代码,看看是否有任何明显的瓶颈。

不太容易的解决方法是切换到不同的优化算法(例如,来自 Sentelle 等人的上述论文的 SVM-RSQP)。但是,如果您有一个有效的 SMO 实现,您可能应该只在最后的手段下才真正这样做。

【讨论】:

    【解决方案2】:

    如果想要完全收敛,特别是C很大的话,需要很长的时间。可以考虑定义一个大的停止准则,并给出最大迭代次数,Libsvm中默认是1000000,如果迭代次数越多,时间会成倍增加,但损失不值得付出代价,但结果可能不完全满足KKT条件,一些支持向量在带内,非支持向量在带外,但误差小,可以接受。我认为如果精度更高,建议使用其他二次规划算法而不是SMO算法

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 2015-08-16
      • 2015-01-18
      • 2019-06-03
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 2021-12-06
      相关资源
      最近更新 更多