Я использую PYML для построения мультиклассовой машины с линейным вектором поддержки (SVM). После обучения SVM я хотел бы иметь возможность сохранить классификатор, чтобы при последующих запусках я мог использовать классификатор сразу, без переобучения. К сожалению, функция .save () для этого классификатора не реализована, и попытка ее перехвата (как со стандартным pickle, так и cPickle) выдает следующее сообщение об ошибке:
pickle.PicklingError: Can't pickle : it's not found as __builtin__.PySwigObject
Кто-нибудь знает способ обхода этой или альтернативной библиотеки без этой проблемы? Спасибо.
Редактировать / обновить
Сейчас я тренируюсь и пытаюсь сохранить классификатор с помощью следующего кода:
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);
Обратите внимание, что теперь я сохраняю с помощью механизма сохранения PyML, а не с использованием консервирования, и что я передал "saveSpace = False" в функцию обучения. Тем не менее, я все еще получаю сообщение об ошибке:
ValueError: in order to save a dataset you need to train as: s.train(data, saveSpace = False)
Однако я передаю saveSpace = False ... так, как мне сохранить классификатор (ы)?
P.S.
Проект, в котором я использую это pyimgattr , на случай, если вам нужен полный тестируемый пример ... программа запускается с "./pyimgattr.py train" ... которая выдаст вам эту ошибку , Также примечание к информации о версии:
[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