使用最少的内存来训练数据的最有效方法是什么?


10

这是我的训练数据:200,000个示例x 10,000个功能。所以我的训练数据矩阵是-200,000 x 10,000。

当我为每个示例生成功能时,我设法将每个数据集一个接一个地保存(一个示例一个接一个),从而将其保存到一个平面文件中而没有内存问题。

但是,现在当我使用MilkSVM light或任何其他机器学习算法时,一切都会尝试将整个训练数据加载到内存中,而不是一一训练。但是,我只有8 GB的RAM,因此无法进行这种方式。

您是否知道我可以逐个训练一个数据集的算法?也就是说,在训练时,我随时都可以将一个数据集加载到内存中。


1
“每个数据集一个一个地保存”是什么意思?您是说“数据的每一行”吗?如果您有多个数据集,它们一个接一个地保存,为什么不一个接一个地加载它们并使算法适合每个呢?
扎克2012年

1
“一个数据集一个数据集”是否意味着一行一行?即一个数据集= 10000个要素?如果是这种情况,那么您可能正在寻找在线算法,请参见:en.wikipedia.org/wiki/Online_algorithmen.wikipedia.org/wiki/Online_machine_learning。存在许多机器学习算法的在线版本,例如SVM和随机森林。
Herra Huu

谢谢..扎克和赫拉。我编辑了问题,以更清晰地一步一步定义。是的,我当时在考虑在线学习,但从未想过在线算法,让我继续阅读并尝试一下。
madCode

Answers:


4

我认为这类学习的术语是核心学习。一个建议是vowpal wabbit,它具有一个方便的R库以及许多其他语言的库。


我在安装boost时遇到依赖问题。您对我为什么得到这个有任何想法吗?bit.ly/L939DO
madCode

@madCode我从未真正使用过vowpal wabbit,因此我无法帮助您安装它。我听说他们的邮件列表很棒,而且我相信您可以在那里找到设置邮件的帮助。
Zach 2012年

嘿..扎克 工作正常。我安装了它,甚至给了我预测。谢谢:-)
madCode

1

我衷心支持扎克的建议。vowpal wabbit是一个极好的选择,它的速度让您感到惊讶。vowpal wabbit的规范并不认为200k x 10k的数据集很大。

vowpal_wabbit(可通过https://github.com/JohnLangford/vowpal_wabbit以源代码形式获得,Ubuntu Universe中可将其作为标准软件包提供旧版本)是一种快速的在线线性+双线性学习器,输入非常灵活。您可以混合使用二进制和数字值功能。无需对功能编号,因为变量名称将“按原样”运行。它具有大量的选项,算法,归约,损失函数以及所有方面的极大灵活性。您可以加入邮件列表(通过github查找)并询问任何问题。社区是一个知识渊博且支持社区的组织。


1

在这里回答了类似的问题。重点是大多数机器学习/数据挖掘算法都是批处理学习器,它们将所有数据加载到内存中。因此,您需要拥有非常大的数据集的不同工具。另请参阅该问题的工具。

在线学习是减少算法内存占用的一种方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.