J'utilise PYML pour construire une machine de vecteur de support linéaire multicouche (SVM). Après l'entraînement du SVM, j'aimerais pouvoir sauvegarder le classifieur, de sorte que lors des courses suivantes, je puisse utiliser le classificateur tout de suite sans rééducation. Malheureusement, la fonction .save() ne sont pas mis en œuvre pour ce classificateur, et tenter de le décaper (à la fois avec cornichon standard et cPickle) donnent le message d'erreur suivant:Enregistrer l'objet PyML.classifiers.multi.OneAgainstRest (SVM())?
pickle.PicklingError: Can't pickle : it's not found as __builtin__.PySwigObject
Est-ce que quelqu'un sait d'une façon de contourner cela ou d'une bibliothèque alternative sans ce problème? Merci.
Modifier/Mettre à jour
Je suis maintenant la formation et de tenter de sauver le classificateur avec le code suivant:
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);
Notez que je suis en train gardais avec le mécanisme PyML sauver plutôt que de décapage et que j'ai passé "saveSpace = False" à la fonction d'entraînement. Cependant, je suis gettting encore une erreur:
ValueError: in order to save a dataset you need to train as: s.train(data, saveSpace = False)
Cependant, je passe saveSpace = Faux ... Alors, comment puis-je enregistrer le classificateur (s)?
P.S.
Le projet dans lequel j'utilise ceci est pyimgattr, au cas où vous voudriez un exemple complet testable ... le programme est exécuté avec "./pyimgattr.py train" ... qui vous obtiendra cette erreur. En outre, une note sur les informations de version:
[[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
@phes, je suis désolé, pourriez-vous clarifier un peu? Que devrais-je passer pour m'entraîner? saveSpace = True ou saveSpace = False? En outre, qu'en est-il du chargement des classificateurs ... si je les charge individuellement comme vous le suggérez, comment les remettre dans le classificateur multiclasse unique? –
saveSpace = Faux (trucs bizarres ...) Les abstractions PyMLs ont vraiment des fuites. Ok, j'ai changé l'exemple de source pour relire les modèles et construire un nouveau classificateur multiclass et recalculer les scores pour les données de test. – ephes
Merci. Il semble que votre OneAgainstRestFixed soit identique à OneAgainstRest d'origine, sauf que vous utilisez "self.classifiers [i] .train (datai, ** args)" alors que l'original omet accidentellement le paramètre "** args". Les choses économisent maintenant, mais le chargement ne fonctionne pas correctement. Je vais créer une question de suivi pour cela. –