Save PyML.classifiers.multi.OneAgainstRest(SVM()) object?
Posted
by Michael Aaron Safyan
on Stack Overflow
See other posts from Stack Overflow
or by Michael Aaron Safyan
Published on 2010-04-20T10:03:03Z
Indexed on
2010/04/21
11:43 UTC
Read the original article
Hit count: 322
I'm using PYML to construct a multiclass linear support vector machine (SVM). After training the SVM, I would like to be able to save the classifier, so that on subsequent runs I can use the classifier right away without retraining. Unfortunately, the .save() function is not implemented for that classifier, and attempting to pickle it (both with standard pickle and cPickle) yield the following error message:
pickle.PicklingError: Can't pickle : it's not found as __builtin__.PySwigObject
Does anyone know of a way around this or of an alternative library without this problem? Thanks.
Edit/Update
I am now training and attempting to save the classifier with the following code:
mc = multi.OneAgainstRest(SVM()); mc.train(dataset_pyml,saveSpace=False); for i, classifier in enumerate(mc.classifiers): filename=os.path.join(prefix,labels[i]+".svm"); classifier.save(filename);
Notice that I am now saving with the PyML save mechanism rather than with pickling, and that I have passed "saveSpace=False" to the training function. However, I am still gettting an error:
ValueError: in order to save a dataset you need to train as: s.train(data, saveSpace = False)
However, I am passing saveSpace=False... so, how do I save the classifier(s)?
P.S.
The project I am using this in is pyimgattr, in case you would like a complete testable example... the program is run with "./pyimgattr.py train"... that will get you this error. Also, a note on version information:
[michaelsafyan@codemage /Volumes/Storage/classes/cse559/pyimgattr]$ python Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import PyML >>> print PyML.__version__ 0.7.0
© Stack Overflow or respective owner