我在用Python(scikit-learn)进行机器学习,使用相同的数据但不同的分类器。当我使用50万条数据时,LR和SVM(线性核)所需时间大致相同,SVM(多项式核)则需要永远的时间。但当使用500万条数据时,LR似乎比SVM(线性)快很多,我想知道这是不是人们通常发现的情况?
回答:
“更快”这个问题有点奇怪,部分原因是很难进行公平的比较,而且这取决于具体的上下文。在线性情况下,LR和SVM非常相似。线性情况下的简要总结是,逻辑回归和SVM都非常快,速度差异通常不应太大,并且在某些情况下两者都可能更快或更慢。
从数学角度来看,逻辑回归是严格凸的[其损失函数也更平滑],而SVM只是凸的,这有助于LR在优化角度上“更快”,但这并不总是意味着等待时间更短。
部分原因是,计算上SVM更简单。逻辑回归需要计算exp
函数,这比SVM中使用的max
函数要贵得多,但在大多数情况下,这些计算并不构成主要的工作量。SVM在对偶空间中有硬零值,因此一个常见的优化方法是执行“收缩”,你可以假设(通常是正确的)某个数据点的贡献在近期不会改变,从而停止访问它/检查它的最优性。SVM损失的硬零值和软边界形式中的C
正则化项允许这样做,而LR没有这样的硬零值可以利用。
然而,当你想要快速的结果时,通常不会使用精确求解器。在这种情况下,上述问题大多消失了,两者在这种情况下学习速度通常一样快。
根据我自己的经验,我发现基于双坐标下降的求解器在获得两者的精确解时是最快的,逻辑回归在实际运行时间上通常比SVM更快,但并非总是如此(而且速度差异从不超过2倍)。然而,如果你尝试比较LR和SVM的不同求解方法,你可能会得到关于哪个“更快”的非常不同的结果,这些比较不一定是公平的。例如,SVM的SMO求解器可以用于线性情况,但由于它没有利用你只关心线性解的事实,它会慢几个数量级。