【问题标题】:C++ data for SVMSVM 的 C++ 数据
【发布时间】:2014-05-21 06:29:06
【问题描述】:

我将使用 openCV 的 (C++) SVM(支持向量机)进行分类。但是有一个问题:

特征向量非常大(每个都有 1890000 个元素),我有超过 10000 个特征向量来训练 SVM。如何在没有记忆问题的情况下操作或使用特征向量?

【问题讨论】:

  • 我建议你使用像PCA这样的特征缩减算法。
  • 1.买一台更高级的电脑……看起来你需要一台有 256 gig 内存的电脑。 2. 一次只处理一个或分块处理(问题是 10000 倍数,1890000 个双精度元素只有 14 兆字节),如果可能的话,将其余部分留在硬盘上。
  • Dimensionality reduction 是你的朋友。
  • 就像 herohuyongtao 和 gokhans 所说的那样,使用 PCA 进行降维,或者只是删除特征向量的冗余部分应该会有所帮助。现在你的 SVM 训练需要很多时间,记住 SVM 的预测是 O(support vector * size of feature vector ),所以你的 SVM 预测也会很慢。

标签: c++ opencv bigdata svm


【解决方案1】:

对于如此高的维度和如此多的训练样本,您将需要大量内存才能使用任何流行的 SVM 实现。如果我要面对这个问题,那么我至少会考虑以下选项之一:

  • 降低每个向量的维度,有很多算法可以做到这一点,但 PCA 是一个好的开始。
  • 在某些具有大量内存的主机中获取计算时间(也许亚马逊 ec2 实例之一就足够了)
  • 使用 SVM 的线性在线近似进行测试。在高维中,您很可能可以将类 linearly 分开,并且您可以使用 SVM online approximations,然后一次仅将一个样本加载到内存中,在这种情况下,您不需要太多内存(我会为此考虑 pegasos-svm)。

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 2016-12-08
    • 2014-03-17
    • 2017-11-20
    • 2015-09-26
    • 2016-07-15
    • 2015-06-24
    • 2014-01-10
    • 2016-08-09
    相关资源
    最近更新 更多