我一直在寻找快速线性 SVM 库,我遇到了两个最重要的Liblinear和Pegasos,从 liblinear 的论文中,它看起来 liblinaer 优于 pegasos。但是,pegasos 声称,如果数据稀疏,那么它的工作速度很快。由于pegasos较早出现,因此在它的文档中没有比较。
那么对于稀疏数据我应该选择什么?
我一直在寻找快速线性 SVM 库,我遇到了两个最重要的Liblinear和Pegasos,从 liblinear 的论文中,它看起来 liblinaer 优于 pegasos。但是,pegasos 声称,如果数据稀疏,那么它的工作速度很快。由于pegasos较早出现,因此在它的文档中没有比较。
那么对于稀疏数据我应该选择什么?
据我所知,稀疏数据都可以很好地处理。问题更多在于数据点的数量。Liblinear 具有原始和对偶的求解器,它们可以高精度地解决问题,而无需调整参数。对于 pegasos 或类似的次梯度下降求解器(如果你想要其中之一,我推荐 Leon Bottou 的sgd),结果很大程度上取决于初始学习率和学习率计划,这可能很难调整。
根据经验,如果我的数据点少于 10k,我总是使用 liblinear(使用原始求解器),甚至可能高达 100k。除此之外,如果我觉得 liblinear 速度较慢,我会考虑使用 SGD。即使 liblinear 稍微慢一些,我更喜欢使用它,因为这意味着我不必考虑学习率、学习率衰减和 epoch 数。
顺便说一句,您可以使用scikit-learn 之类的框架非常轻松地比较这些不同的求解器,其中包括 SGD、Liblinear 和 LibSVM 求解器,或者Lightning,其中包括很多求解器。
LIBLINEAR 和 Pegasos 都是线性分类技术,专门用于处理具有大量实例和特征的大型稀疏数据。在这类数据上,它们只比传统的 SVM 快。
我以前从未使用过 Pegasos,但我可以向您保证,LIBLINEAR 处理此类数据的速度非常快,而且作者说“它与最先进的线性分类器(例如 Pegasos)相比具有竞争力甚至更快”。