我需要在我的笔记本电脑上用数十万个数据点和大约一万个特征训练一个线性分类器。我有哪些选择?这类问题的最新技术是什么?
似乎随机梯度下降是有前途的方向,我的感觉是这是最先进的:
“Pegasos:SVM 的原始估计次梯度求解器”Shai Shalev-Shwartz、Yoram Singer、Nathan Srebro、Andrew Cotter。“数学规划,B 系列,127(1):3-30,年份:2007。”
这是共识吗?我应该往其他方向看吗?
我需要在我的笔记本电脑上用数十万个数据点和大约一万个特征训练一个线性分类器。我有哪些选择?这类问题的最新技术是什么?
似乎随机梯度下降是有前途的方向,我的感觉是这是最先进的:
“Pegasos:SVM 的原始估计次梯度求解器”Shai Shalev-Shwartz、Yoram Singer、Nathan Srebro、Andrew Cotter。“数学规划,B 系列,127(1):3-30,年份:2007。”
这是共识吗?我应该往其他方向看吗?
首先,我想问一下你怎么知道线性分类器是最好的选择?直观地说,对于如此大的空间(R^10000),其他一些非线性分类器可能是更好的选择。
我建议你尝试几个不同的分类器并观察预测错误(我会尝试几个正则化的分类模型)。
如果内存不足,请使用PCA减少维度
我认为你应该看看在线学习方法。感知器和内核感知器非常容易编码并且在实践中工作得非常好,还有很多其他的在线方法。请注意,任何在线学习方法都可以转换为批量学习算法,在这种情况下,它们非常类似于随机梯度下降方法。
如果您使用的是 Matlab,那么 Francesco Orabona 有一个名为DOGMA的非常好的工具箱,其中包含一系列在线学习算法,您可以使用它评估几种不同的方法。我在我的一些研究中使用了它,并发现它非常有用(请注意,据我所知,它期望数据为 [features x examples],因此您可能必须转置它)。
正如其他人所提到的,您可能想尝试降维。PCA 在这里可能不是一个好的选择,因为您必须计算协方差矩阵,这将非常昂贵。您可以尝试查看Random Projections。理论很难,但原理很简单。如果您有兴趣,它基于Johnson-Lindenstrauss 引理,但基本思想是,如果您随机投影到低维空间,那么点之间的距离最多保留一些. 如果您使用的是 RBF 内核,那么距离都是你感兴趣的!
您还可以使用 PCA 来减少维度,而无需计算协方差矩阵 --- 通过使用 PCA 的神经 newtork 等价物。
这是一篇描述它的论文(但我建议您自己搜索):http ://users.ics.tkk.fi/oja/Oja1982.pdf ,这里是指向可能正在使用 matlab 实现的东西的链接:http ://www.cs.purdue.edu/homes/dgleich/projects/pca_neural_nets_website/index.html。
正如 jb 所建议的,我认为最好使用“降维”方法。主成分分析 (PCA) 是一种流行的选择。您也可以尝试无监督的特征学习技术。有关无监督特征学习的更多信息,请访问http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial