2014-04-08 36 views
2

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

特征向量是如此之大(每个都有1890000个元素),我有超过10000个特征向量来训练SVM。如何处理特征向量或使用它们而没有经验内存问题?

+1

我建议你使用PCA等特征缩减算法。 – gokhans

+0

1.找个更好的电脑......看起来你需要256个RAM。 2.一次只处理一个或多个处理块(问题是10000乘法器,1890000个双元素只有14兆字节),如果可能的话,将其余部分留在硬盘上。 – IdeaHat

+0

[降维](http://en.wikipedia.org/wiki/Dimensionality_reduction)是你的朋友。 – herohuyongtao

回答

2

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

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