📜  使用 Streamlit 库部署机器学习模型

📅  最后修改于: 2022-05-13 01:55:48.950000             🧑  作者: Mango

使用 Streamlit 库部署机器学习模型

机器学习:
计算机无需明确编程即可从经验中学习。机器学习是目前最热门的领域之一,世界各地的顶级公司都在使用它来改进他们的服务和产品。但是没有使用在 Jupyter Notebook 中训练的机器学习模型。所以我们需要部署这些模型,以便每个人都可以使用它们。在本文中,我们将首先训练一个 Iris Species 分类器,然后使用 Streamlit 部署模型,Streamlit 是一个用于轻松部署 ML 模型的开源应用程序框架。

流光图书馆:
Streamlit 允许您使用简单的Python脚本为您的机器学习项目创建应用程序。它还支持热重新加载,以便您的应用程序可以在您编辑和保存文件时实时更新。使用 Streamlit API 只需几行代码即可构建应用程序(如下所示)。添加小部件与声明变量相同。无需编写后端、定义不同的路由或处理 HTTP 请求。它易于部署和管理。更多信息可以在他们的网站上找到 - https://www.streamlit.io/

所以首先我们将训练我们的模型。我们不会做太多预处理,因为本文的主要目的不是制作准确的 ML 模型,而是展示其部署。

首先,我们需要安装以下内容 -

数据集可以在这里找到:https://www.kaggle.com/uciml/iris

代码:

import pandas as pd
import numpy as np
  
df = pd.read_csv('BankNote_Authentication.csv')
df.head()

输出:

现在我们首先删除 Id 列,因为它对于 Iris 物种的分类并不重要。然后我们将数据集拆分为训练和测试数据集,并使用随机森林分类器。您可以使用您选择的任何其他分类器,例如逻辑回归、支持向量机等。

代码:

# Dropping the Id column
df.drop('Id', axis = 1, inplace = True)
  
# Renaming the target column into numbers to aid training of the model
df['Species']= df['Species'].map({'Iris-setosa':0, 'Iris-versicolor':1, 'Iris-virginica':2})
  
# splitting the data into the columns which need to be trained(X) and the target column(y)
X = df.iloc[:, :-1]
y = df.iloc[:, -1]
  
# splitting data into training and testing data with 30 % of data as testing data respectively
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)
  
# importing the random forest classifier model and training it on the dataset
from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier()
classifier.fit(X_train, y_train)
  
# predicting on the test dataset
y_pred = classifier.predict(X_test)
  
# finding out the accuracy
from sklearn.metrics import accuracy_score
score = accuracy_score(y_test, y_pred)

我们得到了 95.55% 的准确率,这非常好。

现在,为了使用这个模型来预测其他未知数据,我们需要保存它。我们可以使用 pickle 来保存它,它用于序列化和反序列化Python对象结构。

代码:

# pickling the model
import pickle
pickle_out = open("classifier.pkl", "wb")
pickle.dump(classifier, pickle_out)
pickle_out.close()

在同一目录中将创建一个名为“classifier.pkl”的新文件。现在我们可以开始使用 Streamlit 来部署模型了——

将以下代码粘贴到另一个Python文件中。
代码:

import pandas as pd
import numpy as np
import pickle
import streamlit as st
from PIL import Image
  
# loading in the model to predict on the data
pickle_in = open('classifier.pkl', 'rb')
classifier = pickle.load(pickle_in)
  
def welcome():
    return 'welcome all'
  
# defining the function which will make the prediction using 
# the data which the user inputs
def prediction(sepal_length, sepal_width, petal_length, petal_width):  
   
    prediction = classifier.predict(
        [[sepal_length, sepal_width, petal_length, petal_width]])
    print(prediction)
    return prediction
      
  
# this is the main function in which we define our webpage 
def main():
      # giving the webpage a title
    st.title("Iris Flower Prediction")
      
    # here we define some of the front end elements of the web page like 
    # the font and background color, the padding and the text to be displayed
    html_temp = """
    
    

Streamlit Iris Flower Classifier ML App

    
    """            # this line allows us to display the front end aspects we have      # defined in the above code     st.markdown(html_temp, unsafe_allow_html = True)            # the following lines create text boxes in which the user can enter      # the data required to make the prediction     sepal_length = st.text_input("Sepal Length", "Type Here")     sepal_width = st.text_input("Sepal Width", "Type Here")     petal_length = st.text_input("Petal Length", "Type Here")     petal_width = st.text_input("Petal Width", "Type Here")     result =""            # the below line ensures that when the button called 'Predict' is clicked,      # the prediction function defined above is called to make the prediction      # and store it in the variable result     if st.button("Predict"):         result = prediction(sepal_length, sepal_width, petal_length, petal_width)     st.success('The output is {}'.format(result))       if __name__=='__main__':     main()

您可以通过在终端中键入以下命令来运行它 -


app.py 是我们编写 Streamlit 代码的文件的名称。

该网站将在您的浏览器中打开,然后您可以对其进行测试。此方法也可用于部署其他机器和深度学习模型。