对比了下的spark mllib和 Liblinear 的LR的实现:
liblinear 是基于TRON的求解方式,Mllib的LR是基于LBFGS和SGD两种实现方式都有。
http://spark.apache.org/docs/latest/mllib-linear-methods.html
Algorithms are all implemented in Scala:
- SVMWithSGD
- LogisticRegressionWithLBFGS
- LogisticRegressionWithSGD
- LinearRegressionWithSGD
- RidgeRegressionWithSGD
- LassoWithSGD
https://www.csie.ntu.edu.tw/~cjlin/liblinear/
LIBLINEAR is a linear classifier for data with millions of instances and features. It supports
- L2-regularized classifiers
L2-loss linear SVM, L1-loss linear SVM, and logistic regression (LR) - L1-regularized classifiers (after version 1.4)
L2-loss linear SVM and logistic regression (LR) - L2-regularized support vector regression (after version 1.9)
L2-loss linear SVR and L1-loss linear SVR.
目前我们用的单机版本的是SGD实验,理论上LBFGS比SGD好,但是由于目前我们样本的特征的问题,SGD表现比较好,和其他公司也是有统一的问题,
都猜测是word2vec映射后的特征冗余的问题。
对比Mllib的LR是基于LBFGS和Liblinear是基于TRON的效果测试:发现优化的性能非常接近。
MLLIB里面目前已经有的 online的方式,它也实现的基于spark streaming 的SGD的online 方式,但是我们还是比较偏重于FTRL