Я использую PYML для создания многоклассовой линейной векторной машины (SVM). После обучения SVM я хотел бы сохранить классификатор, чтобы на последующих запусках я мог сразу использовать классификатор без переподготовки. К сожалению, функция .save() не выполняется для этого классификатора, и пытается законсервировать его (как со стандартным рассолом и cPickle) дают следующее сообщение об ошибке:Сохранить объект PyML.classifiers.multi.OneAgainstRest (SVM())?
pickle.PicklingError: Can't pickle : it's not found as __builtin__.PySwigObject
Кто-нибудь знает способ обойти это или альтернативной библиотеки без этой проблемы? Благодарю.
Edit/Update
Я сейчас обучение и попытки сохранить классификатор со следующим кодом:
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» в функцию обучения. Тем не менее, я до сих пор gettting ошибку:
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» ..., которая доставит вам эту ошибку. Кроме того, записка на информацию о версии:
[[email protected] /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
@ephes, извините, не могли бы вы немного разъяснить? Что я должен пройти, чтобы тренироваться; saveSpace = True или saveSpace = False? Кроме того, как насчет загрузки классификаторов ... если я загружаю их по отдельности, как вы предлагаете, как вернуть их в один мультиклассический классификатор? –
saveSpace = False (странные вещи ...) Абстракции PyMLs действительно просачиваются. Хорошо, я изменил исходный образец, чтобы перечитать модели и построить новый многоклассовый классификатор и пересчитать баллы для тестовых данных. – ephes
Спасибо. Похоже, ваш OneAgainstRestFixed идентичен оригинальному OneAgainstRest, за исключением того, что вы используете «self.classifiers [i] .train (datai, ** args)», в то время как оригинал случайно отключает параметр «** args». Вещи сохраняются, но загрузка работает неправильно. Я создам для вас следующий вопрос. –