pickle/joblib AttributeError:模块''uumain\'uy'在pytes中没有属性'thing'

2024-10-01 00:28:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我建立了一个自定义的sklearn管道,如下所示:

pipeline = make_pipeline(
    SelectColumnsTransfomer(features_to_use),
    ToDummiesTransformer('feature_0', prefix='feat_0', drop_first=True,  dtype=bool), # Dummify customer_type
    ToDummiesTransformer('feature_1', prefix='feat_1'), # Dummify the feature
    ToDummiesTransformer('feature_2', prefix='feat_2'), # Dummify 
    ToDummiesTransformer('feature_3', prefix='feat_3'), # Dummify
)
pipeline.fit(df)

SelectColumnsTransfomerToDummiesTransformer是实现BaseEstimator和{}的自定义sklearn步骤。 为了序列化这个对象,我使用

^{pr2}$

但是当我反序列化

pipeline = joblib.load('data_pipeline.joblib') 

我得到AttributeError: module '__main__' has no attribute 'SelectColumnsTransfomer'。在

我读过其他类似的问题,并遵循了这篇博客文章中的说明here,但无法解决这个问题。 我复制粘贴类,并在代码中导入它们。如果我创建了这个练习的一个简化版本,整个过程都会正常工作,问题的发生是因为我正在用pytest运行一些测试,而当我运行pytest时,它似乎看不到我的自定义类,事实上还有另一个错误 self = <sklearn.externals.joblib.numpy_pickle.NumpyUnpickler object at 0x7f821508a588>, module = '__main__', name = 'SelectColumnsTransfomer'这暗示我,NumpyUnpickler看不到{},即使在测试中它是导入的。在

我的测试代码

import pytest
from app.pipeline import * # the pipeline objects 
                          # SelectColumnsTransfomer and ToDummiesTransformer 
                          # are here!


@pytest.fixture(scope="module")
def clf():
    pipeline = joblib.load("persistence/data_pipeline.joblib")
    return clf

def test_fake(clf):
    assert True

Tags: thetrueprefix序列化pipelinepytestsklearnfeature
1条回答
网友
1楼 · 发布于 2024-10-01 00:28:07

好吧,我发现了问题。我发现这个问题与我最初认为的blogpost中解释的问题没有任何关系。 你可以很容易地解决这个问题,让你的对象酸洗和取消拾取文件。我用一个单独的脚本(Jupyther笔记本)来pickle,用一个普通的[python脚本来取消pickle。当我在同一个班上做每一件事的时候,效果很好。在

相关问题 更多 >