SVM is a 支持向量机 https://en.wikipedia.org/wiki/Support_vector_machine which 是一个特殊的线性模型。从理论上来说这是一个凸优化问题我们可以在多项式时间内得到全局最优值。有许多不同的优化方法.
过去人们常用二次规划 https://en.wikipedia.org/wiki/Quadratic_programming求解器。如今专门的方法如SMO https://en.wikipedia.org/wiki/Sequential_minimal_optimization和其他被使用。
sklearn 的专门 SVM 优化器基于线性库 https://www.csie.ntu.edu.tw/~cjlin/liblinear/ and libsvm https://www.csie.ntu.edu.tw/~cjlin/libsvm/。如果您对算法感兴趣,有很多文档和研究论文。
请记住,SVC (libsvm) 和 LinearSVC (lib Linear) 对优化问题做出不同的假设,这会导致同一任务上的不同性能(线性内核:LinearSVC 通常比 SVC 高效得多;但有些LinearSVC 无法处理的任务)。
新元是一个随机梯度下降 https://en.wikipedia.org/wiki/Stochastic_gradient_descent基于(这是通用优化方法!)的优化器,可以优化许多不同的凸优化问题(实际上:这或多或少与所有深度学习方法中使用的方法相同;所以人们也在非凸设置中使用它;抛弃理论保证).
sklearn 说:随机梯度下降(SGD)是一种简单但非常有效的凸损失函数下线性分类器判别学习方法。现在它实际上更加通用,但在这里只要注意到它包含(一些)SVM、逻辑回归等就足够了。
现在基于 SGD 的优化与 QP 和其他优化有很大不同。如果以 QP 为例,没有需要调整的超参数。这有点简化,因为可以进行调整,但不需要保证收敛和性能! (QP 求解器的理论,例如内点法 https://en.wikipedia.org/wiki/Interior_point_method更加稳健)
基于 SGD 的优化器(或通用优化器)一阶方法)非常非常难以调整!他们需要调整!一般来说,学习率或学习计划是需要考虑的参数,因为收敛取决于这些(理论和实践)!
这是一个非常复杂的话题,但有些简化规则:
-
专门的 SVM 方法
- 随着样本数量的增加,规模变得更糟
- 不需要超参数调整
-
基于 SGD 的方法
- 一般来说,海量数据可以更好地扩展
- 需要超参数调整
- 仅解决上述任务的一部分(无内核方法!)
我的观点:只要你的时间预算允许,就使用(更容易使用的)LinearSVC!
只是为了说清楚:我强烈建议获取一些数据集(例如来自 sklearn 内部)并在这些候选数据之间进行一些比较。参数调整的需要不是一个理论问题!您将看到非最佳(目标/损失) 很容易得出 SGD 情况!
并永远记住:随机梯度下降对特征缩放敏感 docs http://scikit-learn.org/stable/modules/sgd.html#tips-on-practical-use。这或多或少是一阶方法的结果。