LibSVM 和 LibLinear 有啥区别

Posted

技术标签:

【中文标题】LibSVM 和 LibLinear 有啥区别【英文标题】:What's the difference between LibSVM and LibLinearLibSVM 和 LibLinear 有什么区别 【发布时间】:2012-07-15 13:33:47 【问题描述】:

libsvm 和liblinear 都是实现支持向量机的软件库。有什么不同?以及这些差异如何使 liblinear 比 libsvm 更快?

【问题讨论】:

【参考方案1】:

在实践中,在 libsvm 中实现的 SMO 算法(适用于内核和线性 SVM)的复杂度为 O(n^2) 或 O(n^3),而 liblinear 为 O(n) 但不支持内核 SVM。 n 是训练数据集中的样本数。

因此,对于大中型规模来说,忘记内核并使用 liblinear(或者看看近似内核 SVM 求解器,例如 LaSVM)。

编辑:在实践中,libsvm 在 10k 样本时会变得非常缓慢。

【讨论】:

除了实现问题之外,我还要补充一点,如果您同时运行这两种算法,您获得的准确度分数可能会大不相同。我发现 LibLinear 通常(如果不是总是)获得比 LibSVM 更高的准确度值。 @ogrisel 所以 Liblinear 中的“L2 正则化逻辑回归”分类器具有 O(n) 复杂度? 其实我不确定这可能取决于 liblinear 使用的求解器,但我确信它比 libsvm 使用的 SMO 求解器要好得多。 如果有兴趣的话,我们对最多 16 万个样本的数据集都进行了尝试(在此之后,内核 SVM 的训练速度变得异常缓慢——即使在每个有 16 个内核的 4 个节点上也需要一个多星期才能完成) . Kernel SVM 产生的结果稍微好一点,但考虑到需要大量的计算时间,liblinear 确实应该是大型数据集的更好的默认选择。更多信息请参见我们的(开放获取)论文:dx.doi.org/10.1186/s13321-016-0151-5【参考方案2】:

发件人:http://www.csie.ntu.edu.tw/~cjlin/papers/liblinear.pdf

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

您可能还会在此处看到其中一位创建者提供的一些有用信息:http://agbs.kyb.tuebingen.mpg.de/km/bb/showthread.php?tid=710

我想说,主要思想是 liblinear 被优化以处理线性分类(即不需要内核),而线性分类只是 libsvm 的众多功能之一,因此在逻辑上就分类准确度而言,它可能与 liblinear 不匹配。显然,我在这里做了一些广泛的概括,关于差异的确切细节可能包含在我上面链接的论文以及 libsvm 网站上相应的 libsvm 用户指南中。

【讨论】:

【参考方案3】:

SVM 是support vector machine,它基本上是一个线性分类器,但是使用了很多核变换,预先将非线性问题变成了线性问题。

从上面的链接中,似乎 liblinear 是非常相同的东西,没有那些内核转换。因此,正如他们所说,在不需要内核转换的情况下(他们提到文档分类),它会更快。

【讨论】:

以上是关于LibSVM 和 LibLinear 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

libsvm liblinear 如何使用直方图交集/卡方内核

Anaconda 安装第三方包 libsvm liblinear

用于 HOG 训练的 LibLinear + grid.py (LibSVM)

Libsvm / Liblinear 中的实例称重

LIBLINEAR/LIBSVM“第 1 行输入格式错误”

liblinear 的 50% 准确率问题