首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Joblib无法正确取消酸菜类

Joblib无法正确取消酸菜类
EN

Stack Overflow用户
提问于 2018-02-22 20:40:41
回答 1查看 990关注 0票数 0

当我尝试使用joblib解选我的对象时,我得到了属性错误。我是否应该单独对类进行酸洗,然后再将其取消酸洗?

代码语言:javascript
运行
复制
class LengthTransformer(TransformerMixin):

    def transform(self, X, **transform_params):
        length = pd.DataFrame(X.apply(lambda x: len(x)))
        return length

    def fit(self, X, y=None, **fit_params):
        return self

pipeline = Pipeline([('features', FeatureUnion([
                                 ('ngram_tf_idf', Pipeline([
                                     ('vect', CountVectorizer()),
                                     ('tfidf', TfidfTransformer())
                                 ])),
                                 ('length',LengthTransformer())
                            ])),
                             ('clf', clf),])

vectorizer_name = 'fpath'+name

joblib.dump(pipeline.steps[0][1],vectorizer_name+'_vect_'+str(int(accuracy*100)) +'.pkl')

在此处加载酸洗过的文件

代码语言:javascript
运行
复制
vect_file = "MultinomialNB_vect_80.pkl"
vect = joblib.load(vect_file)

我得到以下错误。我相信这是因为它不会影响我的课程。我读到pickle可以用来序列化类,但我使用joblib来获得更好的性能。

代码语言:javascript
运行
复制
 AttributeError                            Traceback (most recent call last)
<ipython-input-4-a5d89ba85002> in <module>()
      4 vect_file = "MultinomialNB_vect_80.pkl"
----> 5 vect_n = joblib.load(vect_file)
      6 print(vect_n)
      7 # tfid = vect_n.steps[1][1]

~/anaconda2/envs/py35/lib/python3.5/site-packages/sklearn/externals/joblib/numpy_pickle.py in load(filename, mmap_mode)
    576                     return load_compatibility(fobj)
    577 
--> 578                 obj = _unpickle(fobj, filename, mmap_mode)
    579 
    580     return obj

~/anaconda2/envs/py35/lib/python3.5/site-packages/sklearn/externals/joblib/numpy_pickle.py in _unpickle(fobj, filename, mmap_mode)
    506     obj = None
    507     try:
--> 508         obj = unpickler.load()
    509         if unpickler.compat_mode:
    510             warnings.warn("The file '%s' has been generated with a "

~/anaconda2/envs/py35/lib/python3.5/pickle.py in load(self)
   1041                     raise EOFError
   1042                 assert isinstance(key, bytes_types)
-> 1043                 dispatch[key[0]](self)
   1044         except _Stop as stopinst:
   1045             return stopinst.value

~/anaconda2/envs/py35/lib/python3.5/pickle.py in load_global(self)
   1340         module = self.readline()[:-1].decode("utf-8")
   1341         name = self.readline()[:-1].decode("utf-8")
-> 1342         klass = self.find_class(module, name)
   1343         self.append(klass)
   1344     dispatch[GLOBAL[0]] = load_global

~/anaconda2/envs/py35/lib/python3.5/pickle.py in find_class(self, module, name)
   1394             return _getattribute(sys.modules[module], name)[0]
   1395         else:
-> 1396             return getattr(sys.modules[module], name)
   1397 
   1398     def load_reduce(self):

AttributeError: module '__main__' has no attribute 'LengthTransformer'
EN

回答 1

Stack Overflow用户

发布于 2018-02-22 21:15:10

在一个单独的模块中定义您的类,并将该模块导入正在执行pickle转储的程序和正在进行pickle加载的程序中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48927680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档