Ulu*_*u83 2 python svm scikit-learn
SVM:http://scikit-learn.org/stable/modules/svm.html#classification
SGD:http://scikit-learn.org/stable/modules/sgd.html#classification
似乎对我的眼睛做的几乎一样,因为他们写的是"SGD实现了一个线性模型".有人可以解释它们之间的差异吗?
sas*_*cha 11
SVM是一种支持向量机,是一种特殊的线性模型.从理论上看,这是一个凸优化问题,我们可以在多项式时间内得到全局最优.有许多不同的优化方法.
在过去,人们使用一般的二次规划求解器.如今,使用SMO等专用方法.
sklearn的专用SVM优化器基于liblinear和libsvm.如果您对算法感兴趣,有很多文档和研究论文.
请记住,SVC(libsvm)和LinearSVC(liblinear)对优化问题做出了不同的假设,这导致了同一任务的不同性能(线性内核:LinearSVC通常比SVC更有效;但有些LinearSVC无法解决任务问题.
SGD是一种基于随机梯度下降的(这是一种通用优化方法!)优化器,可以优化许多不同的凸优化问题(实际上:这或多或少与所有深度学习方法中使用的方法相同;因此人们使用它也在非凸的设置中;抛弃理论保证).
sklearn说:随机梯度下降(SGD)是一种简单但非常有效的方法,用于在凸损失函数下对线性分类器进行判别学习.现在它实际上更加通用,但是在这里它足以指出它包含(一些)SVM,逻辑回归和其他.
现在,基于SGD的优化与QP和其他优化非常不同.例如,如果以QP为例,则没有要调整的超参数.这有点简化,因为可以进行调整,但不需要保证收敛和性能!(QP求解器的理论,例如内点法更加稳健)
基于SGD的优化器(或一般的一阶方法)非常难以调整!他们需要调整!一般来说,学习率或学习时间表是看待收敛取决于这些(理论和实践)的参数!
这是一个非常复杂的主题,但有一些简化的规则:
专业的SVM方法
基于SGD的方法
我的观点:使用(更容易使用)LinearSVC,只要它正常工作,给定你的时间预算!
只是为了说清楚:我强烈建议抓住一些数据集(例如来自sklearn内部)并在这些候选者之间进行一些比较.对参数调整的需求不是理论问题!您将很容易在SGD案例中看到非最佳(客观/损失)结果!
永远记住:随机梯度下降对特征缩放 文档很敏感.这或多或少是一阶方法的结果.