R 在硬盘上存储的超大数据集上训练SVM

R 在硬盘上存储的超大数据集上训练SVM,r,machine-learning,bigdata,svm,libsvm,R,Machine Learning,Bigdata,Svm,Libsvm,存在一个非常大的自己收集的数据集,其大小[2000000 12672],其中行显示实例的数量,列和特征的数量。此数据集占用本地硬盘上的~60 GB。我想在这个数据集上训练一个线性SVM。问题是我只有8G的RAM因此我无法一次加载所有数据。有没有办法在这个大数据集上训练SVM?生成数据集是我自己的愿望,目前是HDF5格式。 谢谢欢迎来到机器学习!在这个领域工作的难点之一是计算需求。有两种主要的算法,在线和离线 在线:支持一次输入一个示例,每个示例稍微改进模型 离线:支持一次输入整个数据集,实现比

存在一个非常大的自己收集的数据集,其大小[2000000 12672],其中行显示实例的数量,列和特征的数量。此数据集占用本地硬盘上的~60 GB。我想在这个数据集上训练一个线性SVM。问题是我只有8G的RAM因此我无法一次加载所有数据。有没有办法在这个大数据集上训练SVM?生成数据集是我自己的愿望,目前是HDF5格式。
谢谢

欢迎来到机器学习!在这个领域工作的难点之一是计算需求。有两种主要的算法,在线和离线

  • 在线:支持一次输入一个示例,每个示例稍微改进模型
  • 离线:支持一次输入整个数据集,实现比在线模型更高的精度
许多典型算法既有在线实现,也有离线实现,但支持向量机不是其中之一。据我所知,支持向量机传统上只是一种离线算法。原因是围绕“粉碎”数据集的许多细节。我不想在这里谈太多的数学问题,但如果你仔细研究一下,就会发现这一点

还值得注意的是,支持向量机的复杂性介于
n^2
n^3
之间,这意味着即使可以将所有内容加载到内存中,实际训练模型也需要很长时间。在移动到完整数据集之前,通常使用数据集的较小部分进行测试

当移动到完整数据集时,您必须在比您自己的机器大得多的机器上运行此数据集,但是AWS应该为您提供足够大的数据,尽管根据您的数据大小,我强烈建议使用SVM以外的其他工具。在大数据量的情况下,神经网络方法非常出色,并且可以在更实际的时间内进行训练


正如评论中所提到的,还有一个
核心外算法的概念,它可以直接对存储在磁盘上的对象进行操作。我所知道的唯一一个能够提供优秀核心外算法的团队是。这是一个商业产品,但可能是您在这里的最佳解决方案。

支持向量机的随机梯度下降方法可能会有所帮助,因为它可以很好地扩展并避免
n^2
问题。R中提供的一个实现是
RSofia
,它是由Google的一个团队创建的,在中讨论。在本文中,他们表明,与传统的SVM相比,SGD方法显著减少了训练时间(这是由于1,成对学习方法和2,只有一部分观测值最终用于训练模型)

请注意,
RSofia
比R中可用的其他一些SVM包稍微简单一些;例如,您需要自己对特征进行居中和缩放


至于你的记忆问题,如果你需要整个数据集,那就有点奇怪了——我希望你能很好地阅读数据样本,然后在此基础上训练你的模型。为了确认这一点,可以在不同的样本上训练多个模型,然后在同一个保持集上估计性能。在不同的模型上,性能应该是相似的。

< P>你不知道为什么要使用线性支持向量机,但是如果你可以考虑另一个通常给出更好结果的模型,那么检查HPELM Python包。它可以直接读取HDF5文件。您可以在这里找到它,它对分段数据进行训练,这些数据甚至可以预加载(称为异步)以加快从慢速硬盘的读取速度。

看看
ff
package@tguzella
ff
包在这里没有帮助。@Slater Tyranus为什么没有?@tguzella,因为问题不仅仅是加载文件,而是在SVM中使用它。如果只是访问文件
ff
就可以了,但不适合在离线算法中进一步使用。@Saeed这是回归还是分类问题?如果分类,有多少类?好吧,他明确提到他想应用一个线性支持向量机,它的训练复杂度更低。例如,参见Joachims在KDD2006中的经典论文()@Slater Tyranus感谢您的有用注释。我刚看到这张纸:()你怎么看这张纸?请让我知道你对这篇论文的评论。Thanks@tguzella我错过了,谢谢你的提醒。也就是说,尽管Joachim发表了论文,但大多数线性SVM实现仍然是n^2。如果从零开始构建,这个问题就可以解决。@Saeed如果您希望从零开始实现,那么这篇论文确实会有所帮助,但看起来这是一项相当艰巨的任务。