热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用FLASKRESTAPI的机器学习模型

在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP

在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的REST API。 我们将从创建机器学习模型开始。 然后,我们将看到使用Flask创建API并使用Postman对其进行测试的分步过程。

第1部分:创建机器学习模型

我们需要做的第一件事是导入必要的库。 导入必要的库后,我们将需要导入数据。 在这个项目中,我们将使用Boston Housing数据集,可以从sklearn.datasets下载。

# importing necessary libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import metrics# importing dataset from sklearn
from sklearn.datasets import load_boston
boston_data = load_boston()# initializing dataset
data_ = pd.DataFrame(boston_data.data)### Top five rows of dataset
data_.head()

当前,我们的数据集没有任何功能名称。 因此,我们将需要为数据集导入特征名称。

# Adding features names to the dataframe
data_.columns = boston_data.feature_names
data_.head()

预处理数据

我们要预测的变量是价格。 因此,我们现在将为我们的机器学习模型创建目标变量。

# Target feature of Boston Housing data
data_[ 'PRICE' ] = boston_data.target

现在,我们将检查我们的任何功能是否为null和分类。 这是因为空值会导致偏差估计,机器学习模型需要数值而不是分类数值。

# checking null values
data_.isnull().sum()

未找到空值,因此按原样保留要素。 现在,让我们检查是否存在任何分类值。

# checking if values are categorical or not
data_.info()

我们可以看到所有特征都是数字。 因此,现在我们将创建模型。

建立模型

首先,我们需要将特征和目标变量分开。 然后将数据集分为训练和测试集。 最后创建一个模型。

# creating feature and target variable
X = data_.drop([ 'PRICE' ], axis= 1 )
y = data_[ 'PRICE' ]# splitting into training and testing set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size= 0.2 , random_state= 1 )
print( "X training shape : " , X_train.shape )
print( "X test shape : " , X_test.shape )
print( "y training shape :“ , y_train.shape )
print(" y test shape :”, y_test.shape )# creating model
from sklearn.ensemble import RandomForestRegressor
classifier = RandomForestRegressor()
classifier.fit(X_train, y_train)

现在,让我们评估用于训练和测试集的模型的性能。

# Model evaluation for training data
prediction = classifier.predict(X_train)
print( "r^2 : " , metrics.r2_score(y_train, prediction))
print( "Mean Absolute Error: " , metrics.mean_absolute_error(y_train, prediction))
print( "Mean Squared Error: " , metrics.mean_squared_error(y_train, prediction))
print( "Root Mean Squared Error : " , np.sqrt(metrics.mean_squared_error(y_train, prediction)))# Model evaluation for testing data
prediction_test = classifier.predict(X_test)
print( "r^2 : " , metrics.r2_score(y_test, prediction_test))
print( "Mean Absolute Error : " , metrics.mean_absolute_error(y_test, prediction_test))
print( "Mean Squared Error : " , metrics.mean_squared_error(y_test, prediction_test))
print( "Root Mean Absolute Error : " , np.sqrt(metrics.mean_squared_error(y_test, prediction_test)))

第2部分:保存和使用机器学习模型

我们将使用pickle保存模型。 序列化和反序列化机制有助于将机器学习对象模型保存到字节流中,反之亦然。 模型将保存在model文件夹下。 该项目的工作结构在第3部分中显示。

# saving the model
import pickle
with open( 'model/model.pkl' , 'wb' ) as file:pickle.dump(classifier, file)# saving the columns
model_columns = list(X.columns)
with open( 'model/model_columns.pkl' , 'wb' ) as file:pickle.dump(model_columns, file)

第3部分:使用Flask创建用于机器学习的API

成功创建机器学习模型之后。 我们将需要在Flask中创建一个网络服务器。 Flask是轻量级的Web应用程序,易于使用并可以扩展到复杂的应用程序。 本教程介绍Flask应用程序的基本实现,即制作Web服务器和简单的REST API。

这是整个项目的组织方式:

要使用Flask,请先创建一个文件夹名称webapp,然后在终端中使用以下命令在其内部安装flask。 确保烧瓶位于webapp文件夹中。

>> pip install Flask

使用Flask可以生成最少的Web应用程序。 以下代码将创建一个简单的Web应用程序,该应用程序将重定向到指定的URL以产生给定的结果。

from flask import Flaskapp = Flask(__name__)@app.route('/', methods=['GET', 'POST'])
def main () :return "Boston House Price Prediction”if __name__ == " __main__ ":app.run()

运行应用

要在本地计算机上启动Flask服务器,请导航至webapp文件夹并在终端中运行命令。

>> export FLASK_APP=app.py
>> export FLASK_ENV=development
>> flask run

这将执行应用程序。 现在导航到Web浏览器( localhost:5000 )以查看结果。 最终结果如下所示:

让我们将所有代码放在一起,以检查是否错过了任何内容。 所有文件都分为.py文件。 因此,完整的app.py文件应如下所示:

from flask import render_template, request, jsonify
import flask
import numpy as np
import traceback
import pickle
import pandas as pd# App definition
app = Flask(__name__,template_folder= 'templates' )# importing models
with open( 'webapp/model/model.pkl' , 'rb' ) as f:classifier = pickle.load (f)with open( 'webapp/model/model_columns.pkl' , 'rb' ) as f:model_columns = pickle.load (f)@app.route('/')
def welcome () :return "Boston Housing Price Prediction"@app.route('/predict', methods=['POST','GET'])
def predict () :if flask.request.method == 'GET' :return "Prediction page"if flask.request.method == 'POST' :try :json_ = request.jsonprint(json_)query_ = pd.get_dummies(pd.DataFrame(json_))query = query_.reindex(columns = model_columns, fill_value= 0 )prediction = list(classifier.predict(query))return jsonify({"prediction" :str(prediction)})except :return jsonify({"trace" : traceback.format_exc()})if __name__ == "__main__" :app.run()

第4部分:在Postman中测试API

为了测试我们的API,我们将需要API客户端,并且我们将使用Postman。 下载Postman后,它应如下所示。

现在,我们将键入URL( localhost:5000 / predict )并在中键入模型所需的功能。 体内的json格式。 并将请求类型更改为POST。 我们的最终结果应如下所示。

摘要

至此,您已经开发了机器学习并使用Flask创建了API,该API可用于预测波士顿的房屋价格。

扩展这项工作

本文重点介绍为机器学习模型创建REST API和在Postman上进行测试。 此外,它可以扩展为制作Web应用程序并在Heroku云平台中进行部署。

From: https://hackernoon.com/machine-learning-w22g322x



推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • Givenasinglylinkedlist,returnarandomnode'svaluefromthelinkedlist.Eachnodemusthavethe s ... [详细]
author-avatar
用户rsvowi2rvt
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有