基于scikitlearn和Flask的随机森林回归模型

2024-05-23 18:09:52 发布

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

我有一个烧瓶应用程序在当地环境中工作。但当我在生产模式下运行它时,它不工作

我正在使用pickle保存我的模型,我测试了joblib以保存模型

当我加载pickle文件时出现问题:我有一个504超时错误。 我加载的文件是这样的,一旦培训生成了该文件: model = pickle.load(open(file))

我肯定是培训生成的pickle文件引发了这个错误(我使用其他pickle文件进行了测试)

经过进一步调查,我发现管道函数Pipeline导致了以下问题:

model = Pipeline(
        [
            ('features', my_data),
            ('model', ensemble.RandomForestRegressor(min_samples_leaf=1, n_jobs=-1))
        ])
...
pickle.dump(model, file)

这项工作很好:

model = Pipeline(
        [
            ('features', my_data),
            ('model', ensemble.RandomForestRegressor(min_samples_leaf=1, n_jobs=-1))
        ])
model = {}
model["foo"] = "bar"
pickle.dump(model, file)

我对Flask Development服务器没有任何问题,只是在生产环境(apache)中,当然我不想在我的生产环境中使用dev.server

知道生产环境中为什么会发生504错误吗

编辑: 这是我使用pickle.load(…)的方法

def recup_df():
    df = pd.read_pickle("dataframe.pickle")
    mod = pickle.load("model.pickle")
    X = df.head(20).drop(['price'], axis=1)
    y = df.head(20).price.values.copy()
    predict_df = pd.DataFrame.from_dict({
    'predicted':mod.predict(X),
    'true':y,
    'make':X.make,
    'model':X.model
    })
    prediction = dict()
    result = 1
    for data in predict_df.itertuples():
        str_result = "result n°{}".format(result)
        car_name = "{} {}".format(data.make, data.model)
        prediction[str_result] = {
        car_name : [{
        "true price":data.true,
        "predict price":data.predicted
        }]
        }
        result += 1
    output =  {
        "prediction":prediction
    }
    return jsonify(output)

Tags: 文件truedfdatamodelpipeline环境错误
1条回答
网友
1楼 · 发布于 2024-05-23 18:09:52

pickle.dump在涉及由不同转换器组成的管道对象时存在问题

这里是关于这个问题的前一篇文章以及相关的解决方案:How to properly pickle sklearn pipeline when using custom transformer

我尝试了cloudpickle,它与Skleaner.Pipeline一起工作

相关问题 更多 >