代码之家  ›  专栏  ›  技术社区  ›  n00b

无法pickle Scikit学习最近邻分类器-无法pickil instancemethod对象

  •  1
  • n00b  · 技术社区  · 10 年前

    我正在尝试pickle NearestNeighbor模型,但它说无法pickle 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
    
    1 回复  |  直到 10 年前
        1
  •  1
  •   mhawke    10 年前

    NearestNeighbors instance是一个属性,它引用您在 metric 论点Pickle不会对实例方法进行Pickle,因此会出错。

    一种解决方法是移动方法 distanceCIE2000_classifier() 如果可能的话,从类中删除一个常规的独立函数。