【发布时间】:2020-03-07 06:15:38
【问题描述】:
我正在使用 TransformedTargetRegressor 定义我的自定义回归器,将其添加到管道并将模型保存在“joblib”文件中。但是,当我尝试加载模型时,出现错误
模块“main”没有属性“transform_targets”
其中 transform_targets 是为回归器定义的函数之一
def transform_targets(targets):
targets = (targets - min_t)/(max_t-min_t)
return targets
def inv_transform_targets(outputs):
outputs = (outputs)*(max_t-min_t)+min_t
return outputs
# Define the model
mlp_model = MLPRegressor(activation = 'relu', validation_fraction = 0.2, hidden_layer_sizes=(1000, ))
full_model = TransformedTargetRegressor(regressor = mlp_model, func = transform_targets,
inverse_func = inv_transform_targets)
# Incorporate feature scaling via pipeline
pipeline = make_pipeline(MinMaxScaler(), full_model)
nn_model = pipeline.fit(X_train,y_train)
# Fit the model which uses the transformed target regressor + maxmin pipeline
nn_model.fit(X_train,y_train)
from joblib import dump, load
dump(nn_model, 'fitness_nn_C1.joblib')
该模型运行良好且预测良好,保存时没有错误,但不会重新加载。如果我用 pickle 保存它,它也会返回类似的错误
AttributeError: Can't get attribute 'transform_targets' on module 'main'>
有谁知道如何将包含 TransformedTargetRegressor 的模型保存在一个文件中,然后可以成功重新加载?我意识到我可以将与转换目标相关的参数/函数转储到一个单独的文件中,但这正是我想要避免的
编辑:
当前的解决方法是使用 MinMaxScaler 作为转换器,或预处理批次中的任何其他转换器,但仍然不知道是否可以在此工作流程中包含自定义函数
【问题讨论】:
标签: python scikit-learn pickle pipeline joblib