Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How much time does take train SVM classifier?

I wrote following code and test it on small data:

classif = OneVsRestClassifier(svm.SVC(kernel='rbf'))
classif.fit(X, y)

Where X, y (X - 30000x784 matrix, y - 30000x1) are numpy arrays. On small data algorithm works well and give me right results.

But I run my program about 10 hours ago... And it is still in process.

I want to know how long it will take, or it stuck in some way? (Laptop specs 4 GB Memory, Core i5-480M)

like image 341
Il'ya Zhenin Avatar asked Aug 10 '13 18:08

Il'ya Zhenin


People also ask

How to speed up SVM training time?

Even the prediction time is polynomial in terms of number of test vectors. If you really must use SVM then I'd recommend using GPU speed up or reducing the training dataset size. Try with a sample (10,000 rows maybe) of the data first to see whether it's not an issue with the data format or distribution.

Why train SVM with traintrain?

Train SVM models up to 143 times faster. Do inference up to 600 times faster. Get the same quality of predictions as other tested frameworks. You get all of this without have to change your code or hardware.

What is an SVM classifier?

The SVM classifier is a supervised classification method. It is well suited for segmented raster input but can also handle standard imagery. It is a classification method commonly used in the research community.

What is the implementation of SVM based on?

The implementation is based on libsvm. The fit time complexity is more than quadratic with the number of samples which makes it hard to scale to dataset with more than a couple of 10000 samples. If you do not want to use kernels, and a linear SVM suffices, there is LinearSVC.


1 Answers

SVM training can be arbitrary long, this depends on dozens of parameters:

  • C parameter - greater the missclassification penalty, slower the process
  • kernel - more complicated the kernel, slower the process (rbf is the most complex from the predefined ones)
  • data size/dimensionality - again, the same rule

in general, basic SMO algorithm is O(n^3), so in case of 30 000 datapoints it has to run number of operations proportional to the2 700 000 000 000which is realy huge number. What are your options?

  • change a kernel to the linear one, 784 features is quite a lot, rbf can be redundant
  • reduce features' dimensionality (PCA?)
  • lower the C parameter
  • train model on the subset of your data to find the good parameters and then train the whole one on some cluster/supercomputer
like image 181
lejlot Avatar answered Oct 31 '22 23:10

lejlot