2016-06-11 2 views
0

Я пытаюсь рассортировать модель NearestNeighbor, но она говорит, что не может расчехлять объекты instancemethod.Невозможно рассортировать Scikit learn NearestNeighbor classifier - не может рассортировать объекты instancemethod

Код:

import cPickle as pickle 
from sklearn.neighbors import NearestNeighbors 

nbrs = NearestNeighbors(n_neighbors=50, algorithm='ball_tree', metric=self.distanceCIE2000_classifier) 
nbrs.fit(allValues) 
with open('/home/ubuntu/nbrs.p','wb') as f: 
     pickle.dump(nbrs, f) 

Полный отслеживающий:

File "/home/ubuntu/colorSetter.py", line 82, in createClassifier 
    pickle.dump(nbrs, f) 
    File "/usr/lib/python2.7/copy_reg.py", line 70, in _reduce_ex 
    raise TypeError, "can't pickle %s objects" % base.__name__ 
    TypeError: can't pickle instancemethod objects 

ответ

0

Где-то в экземпляре NearestNeighbors это атрибут, который относится к методу экземпляра, который вы ему передали в metric аргумента. Пикель не будет определять методы экземпляра, следовательно, ошибку.

Один из способов перемещения метода distanceCIE2000_classifier() из вашего класса в обычную автономную функцию, если это возможно.