Out of memory using svmtrain in Matlab

别来无恙 提交于 2019-12-22 21:14:40

问题


I have a set of data that I am trying to learn using SVM. For context, the data has a dimensionality of 35 and contains approximately 30'000 data-points.

I have previously trained decision trees in Matlab with this dataset and it took approximately 20 seconds. Not being totally satisfied with the error rate, I decided to try SVM.

I first tried svmtrain(X,Y). After about 5 seconds, I get the following message:

??? Error using ==> svmtrain at 453 Error calculating the kernel function: Out of memory. Type HELP MEMORY for your options.

When I looked up this error, it was suggested to me that I use the SMO method: svmtrain(X, Y, 'method', 'SMO');. After about a minute, I get this:

??? Error using ==> seqminopt>seqminoptImpl at 236 No convergence achieved within maximum number (15000) of main loop passes

Error in ==> seqminopt at 100 [alphas offset] = seqminoptImpl(data, targetLabels, ...

Error in ==> svmtrain at 437 [alpha bias] = seqminopt(training, groupIndex, ...

I tried using the other methods (LS and QP), but I get the first behaviour again: 5 second delay then

??? Error using ==> svmtrain at 453 Error calculating the kernel function: Out of memory. Type HELP MEMORY for your options.

I'm starting to think that I'm doing something wrong because decision trees were so effortless to use and here I'm getting stuck on what seems like a very simple operation.

Your help is greatly appreciated.


回答1:


Did you read the remarks near the end about the algorithm memory usage?

Try setting the method to SMO and use a kernelcachelimit value that is appropriate to the memory you have available on your machine.

During learning, the algorithm will build a double matrix of size kernelcachelimit-by-kernelcachelimit. default value is 5000

Otherwise subsample your instances and use techniques like cross-validation to measure the performance of the classifier.

Here is the relevant section:

Memory Usage and Out of Memory Error

When you set 'Method' to 'QP', the svmtrain function operates on a data set containing N elements, and it creates an (N+1)-by-(N+1) matrix to find the separating hyperplane. This matrix needs at least 8*(n+1)^2 bytes of contiguous memory. If this size of contiguous memory is not available, the software displays an "out of memory" error message.

When you set 'Method' to 'SMO' (default), memory consumption is controlled by the kernelcachelimit option. The SMO algorithm stores only a submatrix of the kernel matrix, limited by the size specified by the kernelcachelimit option. However, if the number of data points exceeds the size specified by the kernelcachelimit option, the SMO algorithm slows down because it has to recalculate the kernel matrix elements.

When using svmtrain on large data sets, and you run out of memory or the optimization step is very time consuming, try either of the following:

  • Use a smaller number of samples and use cross-validation to test the performance of the classifier.

  • Set 'Method' to 'SMO', and set the kernelcachelimit option as large as your system permits.



来源:https://stackoverflow.com/questions/15994222/out-of-memory-using-svmtrain-in-matlab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!