我建立了一个自定义的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)
类SelectColumnsTransfomer
和ToDummiesTransformer
是实现BaseEstimator
和{
但是当我反序列化
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
好吧,我发现了问题。我发现这个问题与我最初认为的blogpost中解释的问题没有任何关系。 你可以很容易地解决这个问题,让你的对象酸洗和取消拾取文件。我用一个单独的脚本(Jupyther笔记本)来pickle,用一个普通的[python脚本来取消pickle。当我在同一个班上做每一件事的时候,效果很好。在
相关问题 更多 >
编程相关推荐