在存储在硬盘上的非常大的数据集上训练 SVM

     2023-03-12     115

关键词:

【中文标题】在存储在硬盘上的非常大的数据集上训练 SVM【英文标题】:Train SVM on a very large dataset stored on hard drive 【发布时间】:2015-12-11 19:59:28 【问题描述】:

存在一个非常大的自己收集的数据集,大小为 [2000000 12672],其中行显示实例数,列显示特征数。该数据集在本地硬盘上占用 ~60 GB。我想在这个数据集上训练一个线性 SVM。问题是我只有 8 GB 的 RAM! 所以我无法一次加载所有数据。有什么解决方案可以在这个大型数据集上训练 SVM?生成数据集是我自己的愿望,目前是 HDF5 格式。 谢谢

【问题讨论】:

看看ff @tguzella ff 包在这里没有帮助。 @Slater Tyranus 为什么不呢? @tguzella 因为问题不仅仅是加载文件,而是在 SVM 中使用它。如果只是访问文件ff 会很好,但它不适合在离线算法中进一步使用。 @Saeed 这是回归问题还是分类问题?如果分类,有多少类? 【参考方案1】:

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

在线:支持一次输入一个示例,每个示例都对模型略有改进 离线:支持一次性输入整个数据集,比在线模型精度更高

许多典型算法既有在线实现也有离线实现,但 SVM 不是其中之一。据我所知,SVM 传统上是一种仅离线的算法。其原因是围绕“粉碎”数据集的许多细节。我不会在这里过多地讨论数学,但如果你仔细阅读它应该会很明显。

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

当移动到完整的数据集时,您必须在比您自己的机器大得多的机器上运行它,但 AWS 应该有足够大的东西供您使用,尽管在您的数据量下,我强烈建议您使用 SVM 以外的东西。在大数据量下,神经网络方法确实大放异彩,并且可以在更实际的时间内进行训练。

正如在 cmets 中提到的,还有out-of-core 算法的概念,它可以直接对存储在磁盘上的对象进行操作。我所知道的唯一提供良好核外算法的群体是dato。这是一个商业产品,但可能是您最好的解决方案。

【讨论】:

嗯,他明确提到他想应用线性 SVM,其训练复杂度较低。例如,请参阅 Joachims 在 KDD 2006 中的经典论文 (cs.cornell.edu/people/tj/publications/joachims_06a.pdf) @Slater Tyranus 谢谢你的有用笔记。我刚看到这篇论文:(csie.ntu.edu.tw/~cjlin/papers/kdd_disk_decomposition.pdf) 你怎么看这篇论文?请让我知道你在这张纸上的 cmets。谢谢 @tguzella 我错过了,谢谢提及。也就是说,尽管有 Joachim 的论文,但大多数线性 SVM 实现仍然是 n^2。如果从头开始构建,则可以解决该问题。 @Saeed 如果您想从头开始实施,那篇论文确实可以提供帮助,但它看起来像是一项艰巨的任务。【参考方案2】:

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

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

至于您的内存问题,如果您需要整个数据集,那会有点令人惊讶 - 我希望您能够很好地阅读数据样本,然后在此基础上训练您的模型。为了确认这一点,您可以在不同的样本上训练多个模型,然后在相同的保持集上估计性能 - 不同模型的性能应该相似。

【讨论】:

【参考方案3】:

您没有说明为什么需要线性 SVM,但如果您可以考虑另一种通常可以提供出色结果的模型,请查看 hpelm python 包。它可以直接读取 HDF5 文件。你可以在这里找到它https://pypi.python.org/pypi/hpelm 它训练分段数据,甚至可以预加载(称为异步)以加快从慢速硬盘读取的速度。

【讨论】:

SVM 训练性能

...】:2012-11-0323:01:57【问题描述】:我正在使用SVMLib在MNIST数据集上训练一个简单的SVM。它包含60.000个训练数据。但是,我有几个性能问题:训练似乎没完没了(几个小时后,我不得不手动关闭它,因为它没有响应)。我的代码很... 查看详情

Pytorch 默认数据加载器卡在大型图像分类训练集上

...使用他们的defaultdataloader来加载我的训练数据。我有一个非常大的训练数据集,所以通常每个班级有几千个样本图像 查看详情

删除非常大的数据集上的重复项

】删除非常大的数据集上的重复项【英文标题】:Removingduplicatesonverylargedatasets【发布时间】:2019-02-2317:22:05【问题描述】:我正在处理一个13.9GB的csv文件,其中包含大约1600万行和85列。我知道可能有几十万行是重复的。我运行... 查看详情

svm模型进行分类预测时的参数调整技巧

...率都比较高;当模型在训练集上准确率比较高,而测试集上的准确率比较低时,模型处于过拟合状态;当模型训练集和测试集上准确率都比较低,模型处于欠拟合状态。正常来说测试集上的准确率都会比训练集要低。二:如何确... 查看详情

Keras:使用批量标准化在同一数据集上的不同训练和验证结果

】Keras:使用批量标准化在同一数据集上的不同训练和验证结果【英文标题】:Keras:Differenttrainingandvalidationresultsonsamedatasetusingbatchnormalization【发布时间】:2017-11-1806:29:56【问题描述】:即使我使用相同的数据集,我的训练分类也... 查看详情

好主意/坏主意:在非常大的数据集上使用 Qt 的 QSet?

】好主意/坏主意:在非常大的数据集上使用Qt的QSet?【英文标题】:GoodIdea/BadIdea:UsingQt\'sQSetonverylargedataset?【发布时间】:2010-12-0620:27:11【问题描述】:使用QSet来跟踪非常大的一组相当大的字符串是不是一个坏主意?每个字符... 查看详情

如何在 python 中的大型数据集上训练随机森林?

...发布时间】:2021-10-1013:45:54【问题描述】:我有一个相当大的数据,包括1M样本和1K特征(一个1Mx1K矩阵),我正在尝试用它来训练一个随机森林来解决二元分类问题。这是我通常在数据不是很大时用来训练随机森林的代码。我首... 查看详情

在大量类上训练分类器时,SVM 非常慢

】在大量类上训练分类器时,SVM非常慢【英文标题】:SVMisveryslowwhentrainingclassifieronbignumberofclasses【发布时间】:2019-06-2813:14:29【问题描述】:我正在尝试在大量项目和类上训练一个SVM分类器,这变得非常非常慢。首先,我从我... 查看详情

交叉验证

...际中经常需要验证一个ML模型的稳定性--模型在新数据集上的泛化能力。它需要确保由数据集得到的ML模型已经获得数据集大部分正确的信息,并且不能包含太多噪声,换句话说,它的偏差和方差是较小的。本文将要介绍交叉验证... 查看详情

标准化 SVM 的特征值

...间,我将遇到的特征编号1的最大值是5,而在我开始在更大的数据集上 查看详情

深度学习正则化---提前终止

...集的损失变化如下图所示: 可以看出,模型在验证集上的误差在一开始是随着训练集的误差的下降而下降的。当超过一定训练步数后,模型在训练集上的误差虽然还在下降,但是在验证集上的误差却不在下降了。此时 查看详情

模型评估:模型状态评估

 模型状态过拟合和欠拟合 过拟合:在训练集上的准确率较高,而在测试集上的准确率较低欠拟合:在训练集和测试集上的准确率均较低学习曲线(LearningCurves)1)概念概述学习曲线就是通过画出不同训练集大小时训练集和... 查看详情

过拟合及其解决方式

...A过拟合经常发生:先看范例:运行结果:模型在训练集上的精度是98.5%,在测试集上的精度是90.0%,显然发生过拟合了。解决办法:加入Dropout层,模型修改为:运行结果:加入权重正则化,模型修改为运行结果:模型在训练集上... 查看详情

在 RBF 支持向量机中训练和预测

...8-07-3109:46:47【问题描述】:我正在尝试在我的训练和测试数据集上运行SVMRBF回归。[svm=SVC(kernel=\'rbf\',random_state=0,C=C,gamma=0.9)svm.fit(NewX,NewY)]火车步骤没有任何问题。然而,在预测步骤svm.pr 查看详情

在视频数据集上训练?

】在视频数据集上训练?【英文标题】:Trainingonavideodataset?【发布时间】:2020-06-2504:00:06【问题描述】:我正在使用StandfordDroneDataset,它由带注释的视频组成,我正在接受培训以了解如何进行培训。你可以只训练视频吗?我假设... 查看详情

为什么神经网络模型在测试集上的准确率高于训练集上的准确率?

类似下图:或者下图:来自:吴恩达机器学习Regularization部分。如上图所示,有时候我们做训练的时候,会得到测试集的准确率或者验证集的准确率高于训练集的准确率,这是什么原因造成的呢?经过... 查看详情

如何在 RNN TensorFlow 中使用非常大的数据集?

】如何在RNNTensorFlow中使用非常大的数据集?【英文标题】:HowtouseverylargedatasetinRNNTensorFlow?【发布时间】:2017-12-3103:00:47【问题描述】:我有一个非常大的数据集:7.9GB的CSV文件。其中80%作为训练数据,剩下的20%作为测试数据。... 查看详情

r语言e1071包中的支持向量机:螺旋线型线性不可分数据集rbf核函数支持向量机svm(验证模型在测试集上的表现可视化模型预测的结果添加超平面区域与原始数据标签进行对比分析)

R语言e1071包中的支持向量机:螺旋线型线性不可分数据集、RBF核函数支持向量机SVM(验证模型在测试集上的表现、可视化模型预测的结果、添加超平面区域与原始数据标签进行对比分析)目录 查看详情