我需要在大量训练中训练回归模型 例子,有可能包含任意特征。什么 我应该考虑学习算法吗?为什么?
问题的快速摘要:
我有一些在类似大小的分类问题上训练对数线性模型的经验(使用SVM,平均和投票感知器等)添加任意特征的能力很重要,但在这种情况下,训练时间也是有价值的
例如,到目前为止,我使用SVMLight进行的一项实验花了几周的时间来收集这些数据的一个子集。我们可以跨多核机器或(可能)集群进行并行化,但我们需要在几分钟内训练模型。在线培训会更好。
我成功(并且很快)训练了一个平均感知器模型。但是,据我所知,AP通常不适用于回归。 AP是否为回归模型提供任何收敛保证?还有其他正式理由不应该适用吗?或者这是否符合我的要求?
我应该研究哪些其他选择? SVM可能提供更高的准确性,但二次训练时间是不可接受的。如果可以访问线性时间SVM算法,那么可以很好地工作。
潜在的优势:
感谢您的意见。
答案 0 :(得分:7)
这是大规模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扩展到已在研究论文中发布的大型数据集,但代码不一定可用,可用或维护为上述示例。他们声称效果很好,但每个都有其自身的缺点。许多涉及做一些级别的数据选择。例如,一些研究论文使用线性时间聚类算法来聚类数据并基于聚类训练连续的SVM模型,以便在不使用所有数据的情况下构建模型。核心矢量机声称线性训练时间,但是他们的准确性是否与他们声称的一样高有一些批评。许多论文使用不同的启发式算法来尝试选择最可能的支持向量候选者。其中许多是用于分类,但可能适用于回归。如果您想了解更多关于这项研究的信息,我可以添加一些参考资料。
探索算法的工具
你可能已经熟悉了这些,但我想我会把它放在这里以防万一:
还有其他算法在大型数据集上具有良好的运行时间,但是它们是否能很好地运行很难说,它取决于数据的构成。由于运行时很重要,我将从更简单的模型开始,然后再进行更复杂的操作。 ANN,决策树回归,贝叶斯方法,局部加权线性回归,或模型树等混合方法,它是叶子节点为线性模型的决策树,在大型数据集上可以比SVM更快地完成,并且可能产生效果很好。
WEKA - Weka是探索各种选择的好工具。我会使用WEKA在不同的算法中尝试数据的子集。源代码是开放的,如果你选择了一些东西,你可以根据自己的需要调整它。 http://www.cs.waikato.ac.nz/ml/weka/
R - R编程语言也实现了许多算法,类似于Matlab中的编程。 http://www.r-project.org/
我不建议使用WEKA或R非大规模数据集,但它们是尝试缩小哪些算法可能适合您的有用工具。