python - 为机器学习管道设置 Flask 架构
问题描述
我想设置一个可由 Flask 调用的机器学习管道,但我遇到了一些问题,这些链接适用于我迄今为止阅读的文档:
- https://exploreflask.com/en/latest/views.html#view-decorators
- https://flask.palletsprojects.com/en/1.1.x/api/#flask.Flask
让我解释一下我想到的管道:
从 PostgreSQL 数据库中提取数据框
编码所述数据帧以使其为大多数算法做好准备
- 拆分数据
- 输入管道并确定准确性
- 将模型存储在 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
如果您希望我可以上传整个脚本,但要查看的内容很多,而且由于它是一段很长的常规代码,因此错误需要在我的烧瓶设置的某个地方。
解决方案
推荐阅读
- android - 为什么使用 Android Asset Studio 生成的通知图标的图像是全白的?
- c++ - 试图在 C++ 中输出数组的元素
- json - 如何将 JSON 响应文本保存为变量
- r - 如何阻止 R Studio 和 knitr 将我的 .Rmd PowerPoint 与 MS PowerPoint 以外的应用程序关联
- email - 将 nodemailer 与 G 套件一起使用
- android - Android Pie (9.0) - 编写关闭或重启函数 - 应用程序被特权
- hibernate - 保存数据时出现 TransientObjectException
- java - 如何记录一个接口的所有实现的每个方法的时间成本
- python - HTTP协议的Python套接字和GET方法?
- python - 类实例可以带参数吗?