matlab - 为什么带有 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 实现的 SVM(没有任何 fitcsvm),我使用一个简单的数据集确认了它的有效性。
左图的 C 值('Boxconstraint')为 0.1,右图的 C 值为 100。
从两张图中可以看出,当 C=0.1(小值)时,SMO 优于其他方法,在右图中,当 C=100 时,SMO 开始变得比其他方法效率低。我在文档中看到了一个解释,上面写着:
- 支持向量的稀疏性是 SVM 分类器的理想属性。要减少支持向量的数量,请将 BoxConstraint 设置为较大的值。这个动作增加了训练时间。
上述解释了为什么右边的情况可能会发生,但它并没有说明 SMO 和 quadprog 是否都是这种情况,或者只是 SMO。如果该陈述仅适用于 SMO,这是规范吗?我的意思是:在实际的 SMO 实现(不仅仅是 Matlab 的 SMO 实现)中,这是您在所有或大多数情况下所期望的吗?如果这是预期的和常态,有人可以解释为什么会发生这种情况吗?在解释过程中来自 SMO 实现的方程将受到高度赞赏。
此外,我仍然无法解释为什么当 C=100(右图)时 SMO(绿线)突然变快,当数据集样本大小在某些点而不是在其他点(上升和下降)增加时。谢谢你。
解决方案
推荐阅读
- java - 使用 Mockito 模拟接口时出现空指针异常
- angular - 如何操作表格内的角度材料复选框
- javascript - JS找到对象数组之间的区别
- python - OpenCV查找轮廓的中间线[Python]
- javascript - 如何将数组与打字稿中的对象映射
- css - 将多个 CSS @keyframes 动画锁定在一起
- python - 使用变量更改列表内容
- c++ - 握手失败,出现致命错误 SSL_ERROR_SSL: error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER
- mysql - 对于单个数据库,每个网站都应该有不同的 MySQL 用户吗?
- python - Pandas:如何获取由另一列作为数据框分组的列上具有最大值的行