如何使用Flask将
机器学习集成到Web应用程序中
我们都遇到了使用机器学习的各种Web应用程序。例如,Netflix和YouTube使用ML通过根据观看历史向您推荐新内容来个性化您的体验。这有助于他们做出更好的决策并了解用户的浏览行为。
甚至您也可以创建一个这样的应用程序,在其中输入输入数据,并使用ML模型为您预测输出。如果可以将模型集成到应用程序中,则可以更好地利用您创建的机器学习模型。这不仅突出了您的ML知识,还突出了您的应用程序开发技能。
在本文中,我将教您如何使用Flask在您的Web应用程序中嵌入ML模型。首先,我们将创建一个简单的线性回归模型来预测车辆的二氧化碳排放量。然后,我们将开发一个Web应用程序,该应用程序将使用输入来预测排放。
创建您的机器学习模型
用Flask开发Web应用程序并将模型集成到应用程序中
在Heroku Cloud Platform中部署您的Web应用程序
注意:这只是一个简单的示例。您可以创建自己的机器学习模型,例如回归,分类,聚类等,并将它们部署在您的Web应用程序上。应用程序的设计完全取决于您的Web开发技能。
1.创建您的机器学习模型
我们使用线性回归来预测车辆的二氧化碳排放量。数据集有很多列,但是我们仅将其中一些列用作特征。最后一列代表类标签。我们的数据集有1067行和4列。
带Flask的Web应用程序
我们使用sklearn内置的LinearRegression()类来构建回归模型。以下代码可帮助我们使用Pickle模块保存模型。我们的机器学习模型被保存为“ model.pkl”。当我们的网络应用提供新的输入数据时,我们稍后将使用此文件来预测输出。
Pickle: Python pickle模块用于对python对象结构进行序列化和反序列化。将任何种类的python对象(列表,字典等)转换为字节流(0和1)的过程称为酸洗或序列化或展平或编组。我们可以通过称为解酸的过程将字节流(通过酸洗生成)转换回python对象。
将熊猫作为pd导入
从sklearn.linear_model导入LinearRegression
进口泡菜
df = pd.read_csv(“ FuelConsumption.csv”)
#使用必要的功能
cdf = df [['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB','CO2EMISSIONS']]
#训练数据和预测变量
#使用所有数据进行训练(不使用Tarin-test-split)
x = cdf.iloc [:
y = cdf.iloc [:
回归器= LinearRegression()
#使用Trainig数据拟合模型
regressor.fit(x,y)
#将模型保存到当前目录
#Pickle序列化对象,以便可以将它们保存到文件中,并在以后再次加载到程序中。
pickle.dump(regressor,open('model.pkl','wb'))
'''
#加载模型以比较结果
模型= pickle.load(open('model.pkl','rb'))
打印(model.predict([[2.6,8,10.1]]))
'''
2.使用Flask开发Web应用程序并集成模型
现在我们有了模型,我们将开始使用Flask开发我们的Web应用程序。那些从Flask开始的人可以在这里阅读有关内容。
Flask学习资源:Corey Schafer的Flask教程 ,Python的学习Flask —完整教程
2.1。安装Flask:
您可以使用“ pip install flask”命令。我使用PyCharm IDE开发flask应用程序。要在PyCharm中轻松安装库,请执行以下步骤。
2.2。导入必要的库,初始化flask应用程序,并加载我们的ML模型:
我们将初始化我们的应用程序,然后将“ model.pkl”文件加载到该应用程序。
#import库
将numpy导入为np
从烧瓶导入烧瓶,render_template,请求
导入泡菜#初始化烧瓶应用程序
app = Flask(__ name__)
模型= pickle.load(open('model.pkl','rb'))
2.3。为网络应用的默认页面定义应用路由:
路由指的是应用程序的URL模式(例如myapp.com/home或myapp.com/about)。@app.route("/")是Flask提供的Python装饰器,用于在我们的应用中分配URL以便轻松运行。
我们的网络应用的#default页面
@ app.route('/')
def home():
返回render_template('index.html')
装饰器告诉我们@app,只要用户在给定的时间访问我们的应用程序域(本地服务器的localhost:5000).route(),就执行该home()功能。Flask使用Jinja模板库渲染模板。在我们的应用程序中,我们将使用模板来呈现HTML,这些HTML将显示在浏览器中。
2.4。重定向API以预测CO2排放量:
我们创建一个新的应用程序路由(“ / predict”),该路由从“ index.html”表单中读取输入,然后单击“预测”按钮,然后使用render_template输出结果。
#要在我们的网络应用中使用预测按钮
@ app.route('/ predict',methods = ['POST'])
defdict():
#用于在HTML GUI上呈现结果
int_features = [request.form.values()中x的float(x)]
final_features = [np.array(int_features)]
预测= model.predict(final_features)
输出=轮(预测[0],2)
返回render_template('index.html',precision_text ='CO2车辆的排放量是:{}'。format(output))
让我们看一下我们的index.html文件:
带Flask的Web应用程序
2.5。启动Flask服务器:
如果__name__ ==“ __main__”:
app.run(debug = True)
调用app.run()并将Web应用程序本地托管在[localhost:5000]上。
“ debug = True”可确保我们不需要在每次进行更改时都运行应用程序,只需在服务器仍在运行时刷新网页即可查看更改
项目结构:
具有Flask的Web应用程序-项目结构
项目结构
该项目保存在名为“ heroku_app”的文件夹中。我们首先运行“ mlmodel.py”文件以获取ML模型,然后运行“ app.py”。运行此文件后,我们的应用程序将托管在本地服务器的端口5000上。
您只需在运行“ app.py”后在网络浏览器中键入“ localhost:5000”来打开您的网络应用程序
FuelConsumption.csv —这是我们使用的数据集
mlmodel.py —这是我们的机器学习代码
model.pkl —这是我们运行mlmodel.py文件后获得的文件。它存在于同一目录中
app.py —这是我们在上面创建的Flask应用程序
模板-此文件夹包含我们的“ index.html”文件。在渲染模板时,这在Flask中是必需的。所有HTML文件都放在此文件夹下。
静态-此文件夹包含“ css”文件夹。Flask应用程序中的静态文件夹用于保存CSS和JavaScript文件。
始终先在本地服务器上运行应用程序并检查应用程序的功能,然后再将其在线托管在云平台中,这始终是一个好主意。让我们看看运行'app.py'会发生什么:
带Flask的Web应用程序
点击提供的URL,我们得到我们的网站:
现在,让我们输入所需的值,然后单击“预测”按钮,看看会发生什么。
带Flask的Web应用程序
观察URL(127.0.0.1:5000/predict),这是应用程序路由的使用。单击“预测”按钮后,我们进入预测页面,其中预测函数将使用应用程序的输出呈现“ index.html”页面。
3.在Heroku上部署Web应用程序
既然我们的应用程序已经在本地服务器上成功进行了测试,是时候在Heroku-cloud平台上部署我们的应用程序了。将任何flask Web应用程序部署到Heroku有两个先决条件。
在项目结构上,您可能已经注意到两个名为“ Procfile”和“ requirements.txt”的新文件。这两个文件是在Heroku上部署应用程序所必需的。
在创建Procfile之前,我们需要安装Gunicorn。您可以使用命令“ pip install gunicorn”或使用以上链接在PyCharm中安装库
3.1。创建Procfile:
甲Procfile指定由在启动时的Heroku应用执行的命令。在工作目录中打开一个名为Procfile(没有任何扩展名)的新文件,然后粘贴以下内容。
网址:gunicorn app:app
3.2。创建requirements.txt:requirements.txt文件将包含flask应用程序的所有依赖项。打开一个新文件,并将其命名为“ requirements.txt”。提及以下所有要求:
烧瓶== 1.1.1
古尼康角== 20.0.4
熊猫== 0.25.2
scikit学习== 0.23.2
numpy == 1.17.3
pickle4 == 0.0.1
sklearn == 0.0
或者,您也可以在终端的工作目录中使用以下命令来创建此文件:
点冻结> requirements.txt
3.3。将所有文件上传到您的GitHub存储库中:
要了解如何创建新的存储库,请单击此处。如果您想了解如何将文件上传到存储库,可以从这里获取帮助。上传所有文件后,您的存储库应该看起来像这样。
题库