没有查到对这个问题的很完善的答案,都是些零零碎碎的,尝试总结一下。
复杂度高的原因:
1.SVM参数优化方法是先转为对偶问题再使用SMO算法,最坏情况下要计算n*n次,并不适合在大规模数据集上做分类。
2.svm使用核技巧时,如RBF,特征会升高至无限维,计算量也很大。
补充:
LR较为简单,可以适用于大规模线性分类。SVM可以有效解决高维特征的分类和回归问题。
SVM对小样本的寻优能力是非常好的,无可置疑。SVM的优化目标是结构化风险最小,有优秀的泛化能力,所以在小样本高维特征上表现很好。对大样本可能不太适合,一是上面提到的复杂,二是样本足够多时,支持向量基本固定了,许多不重要样本的增加不能提高性能了。
如何解决复杂度高的问题呢?
1、分布式,对不同样本对做核距离计算,可以分开放在不同机器。有人提到PEGASOS就是一种分布式的SVM的训练方法,待学习。
2、svm-light和libsvm
但实际中这些效果并不太好。