LibSVM和LibLinear有什么区别?

30

libsvmliblinear都是实现支持向量机的软件库。它们有什么区别?这些区别如何使得liblinear比libsvm更快?

3个回答

38

实际上,作为libsvm中支持核函数和线性SVM的SMO算法的复杂度是O(n^2)或O(n^3),而liblinear的复杂度是O(n),但它不支持核SVM。这里的n是训练数据集中样本数。

因此,在处理中大型数据集时,最好避免使用核函数并选择liblinear(或者可以尝试使用近似核SVM求解器,例如LaSVM)。

编辑:实际上,在10,000个样本以上的情况下,libsvm的速度会变得非常缓慢。


1
除了实现问题之外,我还想补充一点,如果你运行这两个算法,你会得到的准确度分数可能会截然不同。我发现LibLinear通常(如果不是总是)比LibSVM得分更高。 - hlin117
@ogrisel,Liblinear中的“L2正则化逻辑回归”分类器具有O(n)复杂度吗? - Hani Goc
其实我不确定,这可能取决于liblinear使用的求解器,但我肯定它比libsvm使用的SMO求解器要好得多。 - ogrisel
如果感兴趣,我们尝试了多达160k个样本的数据集(在此之后,核SVM训练变得非常缓慢 - 即使在每个节点具有16个内核的4个节点上,也需要一周以上才能完成)。核SVM产生了稍微更好的结果,但考虑到所需的巨大计算时间,liblinear确实应该是大型数据集的更好默认选择。更多信息可在我们的(开放获取)论文中找到:http://dx.doi.org/10.1186/s13321-016-0151-5 - Samuel Lampa

10
SVM是支持向量机,基本上是一个线性分类器,但使用许多核变换将非线性问题预先转换为线性问题。
从上面的链接看来,liblinear似乎是相同的东西,没有这些核变换。所以,正如他们所说,在不需要核变换的情况下(他们提到文档分类),它会更快。

3

来源: http://www.csie.ntu.edu.tw/~cjlin/papers/liblinear.pdf

它支持L2正则化逻辑回归(LR),L2和L1损失的线性支持向量机(SVMs)(Boser等人,1992年)。它继承了流行的SVM库LIBSVM的许多特点。

另外,您可能还会从其中一位创建者的这里看到一些有用的信息:http://agbs.kyb.tuebingen.mpg.de/km/bb/showthread.php?tid=710

我认为,主要思想是liblinear被优化来处理线性分类(即不需要内核),而线性分类只是libsvm的许多能力之一,因此在分类准确性方面可能不如liblinear。 显然,在这里我进行了一些广泛的概括,差异的确切细节可能在我上面链接的论文以及libsvm网站上的相应用户指南中得到详细介绍。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接