2012-04-24 50 views
6

我需要在大量训练样本上训练一个回归模型,可能包含任意特征。我应该考虑什么样的 学习算法?为什么?我应该考虑哪些学习算法来训练对数线性回归模型?

问题的快速摘要:

  • 约500万个训练例子
  • 在2-4万元,每年的速度增加训练例子
  • 训练实例当前包含每10个功能
  • 大约400k的人口特征(出自更大的总特征空间)
  • 随时间增加的附加功能
  • 再培训或调整模型(至少)每天把新实例
  • 优化标准:最小平方误差百分比
  • 输出:单实值的数

我有一些经验的培训对数线性模型在类似大小的分类问题上(使用SVM,Averaged和Voted Perceptrons等)添加任意特征的能力很重要,但在这种情况下,训练时间也很有价值。例如,到目前为止,我对SVMLight的一个实验花了几个星期的时间来聚合这些数据的一个子集。我们可以跨多核机器或(可能)集群进行并行处理,但是我们需要在几分钟内对模型进行训练。在线培训会更好。

我成功(并迅速)训练了一个平均感知器模型。但是,据我所知,AP通常不适用于回归。美联社是否为回归模型提供任何收敛保证?有没有其他正式的理由不适用?或者是我的要求合理匹配?

我应该研究哪些其他选项? SVM可能会提供更高的准确性,但二次训练时间不可接受。如果线性时间SVM算法是可访问的,那可以很好地工作。

潜在的长处:

  • 在线培训
  • 开放源代码实现提供(最好在Java中)。如有必要,我们可以推出我们自己的实现,但如果可能的话,我会尽量避免。

感谢您的输入。

+0

对于分类,我已经在随机梯度下降SVM(http://leon.bottou.org/projects/sgd#)方面取得了很大的成功 - 您可能需要考虑使其适应回归。 – etarion 2012-04-25 00:56:18

回答

7

这是大规模支持向量机的经典问题。如果添加了新功能,并且如果未使用在线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 - 幕府机器学习工具箱是专为大规模的学习,他们与一些SVM实现的界面,以及其他方法。我从来没有使用它,但它可能是值得一试:http://www.shogun-toolbox.org

Kernel-machines.org拥有的软件包列表:http://www.kernel-machines.org/software

其他SVM研究

如果你是想要推出自己的产品,有许多技术可以尝试将SVM扩展到已经发表在研究论文中的大型数据集,但代码并不一定可用,可用或维护为上述示例。他们声称好的结果,但每个都有自己的一套缺点。许多涉及做一些水平的数据选择。例如,一些研究论文使用线性时间聚类算法对数据进行聚类,并基于聚类训练连续的SVM模型,以便在不使用所有数据的情况下构建模型。核心向量机声称线性训练时间,但是他们的准确性是否与他们声称的一样高,有一些批评。许多论文使用不同的启发式算法来尝试选择最可能的支持向量候选。其中许多是用于分类的,但可能适用于回归。如果你想了解更多关于这项研究的信息,我可以添加一些参考资料。

工具探索算法

你可能已经熟悉这些,但我想我会扔在这里以防万一:

。它有很好的其他算法大数据集上的运行时间,但是它们是否会运行良好很难说,这取决于数据的组成。由于运行时间很重要,因此我会从较简单的模型开始,然后进入更复杂的模型。人工神经网络,决策树回归,贝叶斯方法,局部加权线性回归或混合方法(如模型树,它是叶节点是线性模型的决策树)都可以比大型数据集上的SVM更快地完成,并且可能产生好的结果。

WEKA - Weka是探索您的选择的好工具。我会使用WEKA以不同算法尝试数据的子集。源代码是打开的,如果你选择了一些你可以根据自己的需要进行调整的代码,就可以用java编写。 R编程语言也实现了很多算法,与Matlab中的编程相似。 http://www.r-project.org/

我不会推荐使用WEKA或R非大型数据集,但它们是试图缩小什么算法可能适合您的有用工具。

+0

感谢编辑vitalik :) – karenu 2012-04-27 17:47:51

+0

感谢您的详细解答。如果可以的话,我会不止一次地投票。 ;-)我认为我前段时间在研究相关问题时着眼于LibLinear,但是因为训练时间而转移了它。我没有意识到它现在支持线性时间训练。听起来这可能是一个非常好的选择。 – AaronD 2012-04-30 16:19:01

+0

对不起,我没有说它是线性时间,只比二次方好。它使用线性内核。它以O(ln)迭代的代价为O(log(1/eps))迭代提供了eps精确解,其中l是训练点的数量,n是每个实例的非零元素的平均数。所以数据越稀疏,越接近线性时间。 – karenu 2012-04-30 17:24:34

相关问题