我应该考虑使用哪种学习算法来训练对数线性回归模型?

Aar*_*onD 6 machine-learning

我需要在大量训练样本上训练回归模型,并且可能包含任意特征.我应该考虑哪些学习算法?为什么?

问题的快速摘要:

  • 大约500万个培训示例
  • 以每年2-4百万的速度添加培训示例
  • 培训示例目前每个包含10个功能
  • 大约400k填充功能(总功能空间大得多)
  • 随着时间的推移添加其他功
  • 每天重新训练或调整模型(至少)以包含新的示例
  • 优化标准:最小平方百分比误差
  • 输出:单个实数值

我有一些在类似大小的分类问题(使用SVM,平均和投票感知器等)上训练对数线性模型的经验.添加任意特征的能力很重要,但在这种情况下,训练时间也很有价值.

例如,到目前为止,我用SVMLight进行的一项实验花了几周的时间来收集这些数据的一个子集.我们可以跨多核机器或(可能)集群进行并行化,但我们需要在几分钟内训练模型.在线培训会更好.

我成功(并且很快)训练了一个平均感知器模型.但是,据我所知,AP通常不适用于回归.AP是否为回归模型提供任何收敛保证?还有其他正式理由不应该适用吗?或者这是否符合我的要求?

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

潜在的优势:

  • 在线培训
  • 可用的开源实现(理想情况下是Java).如有必要,我们可以推出自己的实现,但如果可能的话我会避免这种情况.

感谢您的输入.

kar*_*enu 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非大规模数据集,但它们是尝试缩小哪些算法可能适合您的有用工具.