当前位置: 首页 > 科技观察

如何使用Flask轻松部署机器学习模型?_0

时间:2023-03-21 19:10:52 科技观察

【.com快译】当数据科学家/机器学习工程师使用Scikit-Learn、TensorFlow、Keras或PyTorch等开发机器学习模型时,最终目标是将其部署到生产环境中。在从事机器学习项目时,我们经常过于关注探索性数据分析(EDA)、特征工程、超参数调整等,以至于我们常常忘记了主要目标:从模型预测中提取真实价值。部署机器学习模型或将模型部署到生产意味着使模型对最终用户或系统可用。但是,部署机器学习模型很复杂。本文旨在帮助您开始使用FlaskAPI将经过训练的机器学习模型部署到生产环境中。我将使用线性回归使用利率和前两个月的销售额来预测第三个月的销售额。什么是线性回归?线性回归模型的目的是找到一个或多个特征(自变量)与连续目标变量(自变量)之间的关系。如果只有特征,则称为单变量线性回归;如果有多个特征,则称为多元线性回归。线性回归假设线性回归模型可以用以下等式表示:Y是预测值θ?是偏差项。θ?,...,θn是模型参数x1,x2,...,xn是特征值。图1.线性回归图为什么使用Flask?使用方便。内置开发服务器和调试器。集成单元测试支持。利用REST的请求调度。丰富的文档。项目结构该项目有四个部分:model.py-这包含机器学习模型的代码,用于根据前两个月的销售额预测第三个月的销售额。app.py-这包含FlaskAPI,它通过GUI或API调用接收销售详细信息,根据我们的模型计算预测并返回它们。request.py—这使用requests模块调用app.py中定义的API并显示返回值。HTML/CSS-这包含HTML模板和CSS样式,允许用户输入销售详细信息并显示第三个月的预测销售。图2.用于部署机器学习模型的管道环境和工具scikit-learnpandasnumpyflask代码在哪里?让我们从代码开始。Github上的整个项目可以在这里找到(https://github.com/abhinavsagar/Machine-Learning-Deployment-Tutorials)。首先使用HTML构建前端,供用户输入值。用户需要填写三个字段:利率、第一个月的销售额和第二个月的销售额。DeploymentTutorial1

SalesForecasting

预测第三个月的销售额

{{prediction_text}}
接下来我使用CSS为输入按钮、登录按钮和背景构建一些样式@importurl(https://fonts.googleapis.com/css?family=Open+Sans);html{width:100%;height:100%;overflow:hidden;}body{width:100%;height:100%;font-family:'Helvetica';background:#000;color:#fff;font-size:24px;text-align:center;letter-spacing:1.4px;}.login{position:absolute;top:40%;left:50%;margin:-150px00-150px;width:400px;height:400px;}.loginh1{color:#fff;text-shadow:0010pxrgba(0,0,0,0.3);字母间距:1px;text-align:center;}input{width:100%;margin-bottom:10px;background:rgba(0,0,0,0.3);border:none;outline:none;padding:10px;font-size:13px;颜色:#fff;文字阴影:1px1px1pxrgba(0,0,0,0.3);边框:1pxsolidrgba(0,0,0,0.3);边框半径:4px;框阴影:inset0-5px45pxrgba(100,100,100),0.2),01px1pxrgba(255,255,255,0.2);-webkit-transition:box-shadow.5sease;-moz-transition:box-shadow.5sease;-o-transition:box-shadow.5sease;-ms-transition:box-shadow.5sease;transition:box-shadow.5sease;}viewrawstyle.css托管于?byGitHub>我为这个项目创建了一个自定义销售数据集,它有四列:rate,firstmonthsales,第一个月第二个月的销售额和第三个月的销售额ratesales_in_first_monthsales_in_second_monthsales_in_third_month25003004300650四600200400九450320650七600250350五550200700查看rawsales.csv由GitHub托管?现在,让我们构建一个机器学习模型来预测第三个月的销售额。首先,让我们使用Pandas来处理缺失值。如果没有为一项或多项提供信息,数据将会丢失。如果没有提供任何值,我会用零填充利率列,并用该列的平均值填充第一个月的销售额列。我正在使用线性回归作为机器学习算法。序列化/反序列化简而言之,序列化是一种将Python对象写入磁盘(对象可以转移到任何地方),然后由Python脚本反序列化(回读)的一种方法。图3.序列化和反序列化我使用pickling将Python对象形式的模型转换为字符流。这个想法是这个字符流包含用另一个Python脚本重建对象所需的所有信息。importnumpyasnpimportmatplotlib.pyplotaspltimportpandasasspdimportpickledataset=pd.read_csv('sales.csv')dataset['rate'].fillna(0,inplace=True)dataset['sales_in_first_month'].fillna(dataset['sales_in_first_month'].mean(),inplace=True)X=dataset.iloc[:,:3]defconvert_to_int(word):word_dict={'一':1,'二':2,'三':3,'四':4,'五':5,'六':6,'七':7,'八':8,'九':9,'十':10,'十一':11,'十二':12,'零':0,0:0}returnword_dict[word]X['rate']=X['rate'].apply(lambdax:convert_to_int(x))y=dataset.iloc[:,-1]fromsklearn.linear_modelimportLinearRegressionregressor=LinearRegression()回归器.fit(X,y)pickle.dump(regressor,open('model.pkl','wb'))model=pickle.load(open('model.pkl','rb'))print(model.predict([[4,300,500]))viewrawmodel.pyhostedwith?byGitHub下一部分是构建一个API,在通过GUI接收销售详细信息后,根据我们的模型计算预测销售额。为此,我以Python对象的形式反序列化了pickled模型。我使用index.html来设置主页。使用POST将表单值提交到/predict后,我??们将获得预测的销售额。只需向/results发出另一个POST请求即可显示结果。它接受JSON输入,使用经过训练的模型进行预测,并以JSON格式返回该预测,该格式可通过API端点访问。importnumpyasnpfromflaskiimportFlask,request,jsonify,render_templateimportpickleapp=Flask(__name__)model=pickle.load(open('model.pkl','rb'))@app.route('/')defhome():returnrender_template('index.html')@app.route('/predict',methods=['POST'])defpredict():int_features=[int(x)forxinrequest.form.values()]final_features=[np.array(int_features)]预测=model.predict(final_features)output=round(prediction[0],2)returnrender_template('index.html',prediction_text='Salessshouldbe${}'.format(output))@app.route('/results',methods=['POST'])defresults():data=request.get_json(force=True)prediction=model.predict([np.array(list(data.values()))])output=prediction[0]returnjsonify(output)if__name__=="__main__":app.run(debug=True)viewrawapp.pyhostedwith?byGitHub最后我使用request模块调用app.py中定义的APP。它显示了第三个月的退货销售额。importrequestsurl='http://localhost:5000/results'r=requests.post(url,json={'rate':5,'sales_in_first_month':200,'sales_in_second_month':400})print(r.json())viewrawrequest.pyhostedwith?byGitHub结果使用此命令运行此Web应用程序。$pythonapp.py图4在Web浏览器中打开http://127.0.0.1:5000/,应该会出现如下所示的GUI。图5.图形用户界面结论本文展示了一种部署机器学习模型的非常简单的方法。我使用线性回归来预测第三个月的销售额,使用利率和前两个月的销售额。您可以使用您在本文中学到的知识来构建一些很酷的模型并将它们部署到生产中,以便其他人可以享受结果。原标题:HowtoEasilyDeployMachineLearningModelsUsingFlask,作者:AbhinavSagar