首页 > 解决方案 > 为机器学习管道设置 Flask 架构

问题描述

我想设置一个可由 Flask 调用的机器学习管道,但我遇到了一些问题,这些链接适用于我迄今为止阅读的文档:

让我解释一下我想到的管道:

  1. 从 PostgreSQL 数据库中提取数据框

  2. 编码所述数据帧以使其为大多数算法做好准备

  3. 拆分数据
  4. 输入管道并确定准确性
  5. 将模型存储在 pickle 文件中

到目前为止的工作:

所有部分都作为常规脚本工作我可以将所有步骤都放入一个带有一个装饰器的巨大烧瓶文件中,它也可以运行(我的紧急解决方案)

文件结构

编码器脚本:

#Flask main thread
#makes flask start this part as application and not as module
app = Flask('encoder_module')

@app.route('/df_encoder')

def df_encoder(rng = 4):
     encoding stuff
    `return df`

管道脚本(此处为随机森林回归器)

app = Flask('pipeline_module')

@app.route('/pipeline_rfr')

def pipeline_rfr():
     pipeline stuff
    `return grid_search_rfr`

泡菜模块:

app = Flask('pickle_module')

@app.route('/store_reg_pickle')

def store_pickle():


    """
    Usage of a Pickle Model -Storage of a trained Model
    """
    model = grid_search_rfr
    #specify file name in letter strings
    model_file = "regression_model"
    with open(model_file, mode='wb') as m_f:
        pickle.dump(model, m_f)
    print(f"Model saved in: {os.getcwd()}")
    return model_file

主要的烧瓶文件

#packages
from flask import Flask
from encoder_main_thread import df_encoder
from rfr_pipeline_function import pipeline_rfr
from pickle_call import store_pickle

app = Flask(__name__.split('.')[0])

@app.route('/regression_pipe')
@df_encoder
@pipeline_rfr
@store_reg_pickle
def regression_pipe():
   `return 'pipeline done`

问题是编码器的返回值不能是数据帧,只能是字符串、元组等。

有解决方法吗?

我实际上希望它将数据帧完美地传递到管道并最终将其存储在 pickle 文件中,然后将其保存在文件夹中。

由于某种原因,它无法检测到泡菜文件导入并引发以下错误:

   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "C:\ANACONDA3\Scripts\flask-script.py", line 9, in <module>
    sys.exit(main())
  File "C:\ANACONDA3\lib\site-packages\flask\cli.py", line 967, in main
    cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)
  File "C:\ANACONDA3\lib\site-packages\flask\cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "C:\ANACONDA3\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "C:\ANACONDA3\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\ANACONDA3\lib\site-packages\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\ANACONDA3\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "C:\ANACONDA3\lib\site-packages\click\decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "C:\ANACONDA3\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "C:\ANACONDA3\lib\site-packages\flask\cli.py", line 848, in run_command
    app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
  File "C:\ANACONDA3\lib\site-packages\flask\cli.py", line 305, in __init__
    self._load_unlocked()
  File "C:\ANACONDA3\lib\site-packages\flask\cli.py", line 330, in _load_unlocked
    self._app = rv = self.loader()
  File "C:\ANACONDA3\lib\site-packages\flask\cli.py", line 388, in load_app
    app = locate_app(self, import_name, name)
  File "C:\ANACONDA3\lib\site-packages\flask\cli.py", line 240, in locate_app
    __import__(module_name)
  File "C:\Users\bill-\OneDrive\Dokumente\Docs Bill\TA_files\functions_scripts_storage\flask_test\flask_regression_pipeline.py", line 18, in <module>
    @store_reg_pickle
NameError: name 'store_reg_pickle' is not defined

如果您希望我可以上传整个脚本,但要查看的内容很多,而且由于它是一段很长的常规代码,因此错误需要在我的烧瓶设置的某个地方。

标签: pythonpython-3.xflaskscikit-learnpipeline

解决方案


推荐阅读