我使用PYML来构造一个多类线性支持向量机(SVM)。在训练SVM后,我希望能够保存分类器,以便在后续运行中,我可以立即使用分类器,而无需再次进行再培训。不幸的是,.save()函数不是该分类实施,并试图腌它(这两个标准的泡菜和cPickle的)产生以下错误信息:保存PyML.classifiers.multi.OneAgainstRest(SVM())对象吗?
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 =假...所以,我怎么救分类(S)?
P.S.
我正在使用这个项目是pyimgattr,如果你想要一个完整的可测试的例子...该程序运行“./pyimgattr.py火车”......这会得到你这个错误。此外,在版本信息记:
[[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?此外,如何加载分类器...如果我按照您的建议逐个加载它们,如何将它们放回到单个多分类器中? – 2010-04-20 23:39:00
saveSpace = False(奇怪的东西......)PyMLs抽象真的是漏洞。 好吧,我改变了示例源重新读取模型,并构建一个新的多类分类器,并重新计算测试数据的分数。 – ephes 2010-04-21 11:45:48
谢谢。看起来您的OneAgainstRestFixed与原始OneAgainstRest完全相同,只不过您使用“self.classifiers [i] .train(datai,** args)”,而原始意外地忽略了“** args”参数。事情现在正在节省,但加载工作不正常。我将为此创建一个后续问题。 – 2010-04-22 02:17:58