这是大规模 SVM 的经典问题。如果添加了新功能,则需要重新训练 SVM 模型,如果您不使用在线 svm,则如果添加了新数据。一些选项:
实用选项(现成的):
LIBLINEAR - 如果你可以做线性 SVM,那么有一些算法可以利用线性内核来提供比二次训练时间更好的时间。查看与 libsvm 来自同一研究组的 LIBLINEAR。他们刚刚在昨天发布的 1.91 版本中添加了回归。http://www.csie.ntu.edu.tw/~cjlin/liblinear/
Oracle ODM - Oracle 在其 ODM 包中提供了 SVM。他们采用实用的方法基本上提供“足够好”的 SVM,而无需支付寻找真正最佳解决方案的计算成本。他们使用了一些采样和模型选择技术 - 您可以在此处找到相关信息:http ://www.oracle.com/technetwork/database/options/advanced-analytics/odm/overview/support-vector-machines-paper-1205 -129825.pdf
SHOGUN - SHOGUN 机器学习工具箱专为大规模学习而设计,它们与许多 SVM 实现以及其他方法交互。我从未使用过它,但它可能值得一看:http ://www.shogun-toolbox.org
Kernel-machines.org有一个软件包列表:http: //www.kernel-machines.org/software
其他支持向量机研究
如果你想自己动手,有许多技术可以尝试将 SVM 扩展到已在研究论文中发表的大型数据集,但代码不一定像上述示例那样可用、可用或维护。他们声称效果很好,但每个都有自己的缺点。许多涉及进行某种程度的数据选择。例如,一些研究论文使用线性时间聚类算法对数据进行聚类,并基于聚类训练连续的 SVM 模型,以便在不使用所有数据的情况下构建模型。核心向量机声称训练时间是线性的,但对于它们的准确度是否像他们声称的那样高存在一些批评。许多论文使用不同的启发式算法来尝试选择最有可能的支持向量候选者。其中很多是为了分类,但可能会适应回归。如果您想了解有关其中一些研究的更多信息,我可以添加一些参考资料。
探索算法的工具
你可能已经熟悉这些了,但我想我会把它放在这里以防万一:
还有其他算法在大型数据集上具有良好的运行时间,但很难说它们是否能正常工作,这取决于数据的构成。由于运行时很重要,我会从更简单的模型开始,然后再到更复杂的模型。ANN、决策树回归、贝叶斯方法、局部加权线性回归或混合方法,例如模型树,它是一种叶节点为线性模型的决策树,在大型数据集上都可以比 SVM 更快地完成,并且可能产生好结果。
WEKA - Weka 是探索您的选择的好工具。我会使用 WEKA 在不同的算法中尝试您的数据子集。源代码是开放的,并且在 java 中,如果您选择了可以根据您的需要进行调整的东西。http://www.cs.waikato.ac.nz/ml/weka/
R - R 编程语言也实现了许多算法,类似于 Matlab 中的编程。http://www.r-project.org/
我不建议使用非大规模数据集的 WEKA 或 R,但它们是有用的工具,可以尝试缩小哪些算法可能对您有效。