为什么使用 fitcsvm 的 SMO 求解器需要比 L1-QP 求解器更长的时间才能在 MATLAB 中收敛更大的 BoxConstraint (C) 值?

问题描述

我正在为一个班级开展一个小型项目,我们被要求在 fitcsvm 中实现 L1-QP(求解器)和 SMO(求解器),并将它们的收敛时间与越来越多的示例进行比较。问题本身不是线性可分的,但是,我们使用的是 Soft Margin SVM,因此它确实收敛到了 fitcsvm 的解决方案。

以下是我得到的结果: Y 轴是每种方法(绿线、蓝线和红线中的 3 种方法)收敛到一个解所花费的平均时间。

X 轴是从 100-1000 开始,增量为 100 (100,200,300,...,1000) 的样本数。我们从相同的分布中采样以增加数据集的大小。

蓝线是 fitcsvm('Solver'=L1-QP),绿线是 fitcsvm('Solver'=SMO)。红线是我自己仅使用 quadprog(没有任何 fitcsvm)实现的 SVM,我使用一个简单的数据集确认了它的有效性。

左侧图表的 C 值('Boxconstraint')为 0.1,右侧图表的 C 值为 100。

从这两个图中可以看出,当 C=0.1(小值)时,SMO 优于其他方法,在右图中,当 C=100 时,SMO 开始变得比其他方法效率低下。我在文档中看到了一个解释:

以上解释了为什么右边的可能会发生,但是并没有说明 SMO 和 quadprog 是否都是这种情况,或者只是 SMO。如果该陈述仅适用于 SMO,这是常态吗?我的意思是:这是您在实际 SMO 实现(不仅仅是 SMO 的 Matlab 实现)中的所有或大多数情况下所期望的吗?如果这是预期的并且是常态,有人可以解释为什么会发生这种情况吗?非常感谢在解释过程中 SMO 实现的等式。

Results

此外,我仍然无法解释为什么当 C=100(右图)时,当数据集样本大小在某些点增加而不是在其他点(起伏)时,SMO(绿线)突然变快。谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)