我一直在寻找快速线性SVM库,并且遇到了两个最重要的Liblinear和Pegasos,从liblinear的论文中看来,liblinaer的表现优于pegasos。但是,pegasos声称如果数据稀疏,那么它可以快速运行。
随着pegasos的出现,它的文档中没有任何比较。

那么对于稀疏数据我应该选择什么?

最佳答案

据我所知,稀疏数据都可以很好地处理。问题在于更多的数据点。 Liblinear具有原始函数和对偶函数的求解器,这些求解器可以高精度地解决问题,而无需调整参数。对于pegasos或类似的次梯度下降求解器(如果您要使用其中之一,我建议Leon Bottou的sgd),其结果在很大程度上取决于初始学习率和学习率时间表,这可能很难调整。

根据经验,如果我的数据点少于10k,我将始终使用liblinear(与原始求解器一起使用),甚至可能高达100k。除此之外,如果我感觉liblinear会变慢,我会考虑使用SGD。即使liblinear稍微慢一点,我还是更喜欢使用它,因为这意味着我不必考虑学习率,学习率衰减和历元数。

顺便说一句,您可以使用scikit-learn之类的框架轻松地比较这些不同的求解器,其中包括SGD,Liblinear和LibSVM求解器,或者lightning包括许多求解器。

08-19 20:22