全文共2485字,預計學習時長12分鐘
數據科學的生命周期主要包括數據收集、數據清理、探索性數據分析、模型構建和模型部署。作為數據科學家或機器學習工程師,能夠部署數據科學項目非常重要,這有助於完成數據科學生命周期。通過既有框架(如Django或Flask)對傳統機器學習模型進行部署,可能是一項艱巨耗時的任務。
本文就將展示如何在Python庫中使用streamlit,用不到50行的代碼構建一個簡單的基於機器學習的數據科學web應用程式。
鳶尾花預測應用程式概述
我們將構建一個簡單的機器學習web應用程式,用於預測鳶尾花的類標籤,包括setosa、versicolor和virginica。這需要用到三個Python庫,即streamlit、pandas和scikitlearn。
應用程式的概念流程主要由兩個部分組成:前端和後端。
在前端,左側欄將接受與鳶尾花特徵(如花瓣長度、花瓣寬度、萼片長度和萼片寬度)相關的輸入參數。這些特性會被傳送到後端,後端的訓練模型將預測類標籤作為輸入參數的函數,預測結果再發回前端顯示。
在後端,用戶輸入的參數將被保存到一個數據幀中作為測試數據。同時,利用scikit-learn庫中的隨機森林算法建立分類模型。最後,將該模型應用於預測用戶輸入的數據,並將預測的類標籤返回到三種花卉類型:setosa、versicolor或virginica。此外,該模型還能夠預測概率,從而辨別預測類標籤的相對可信度。
安裝必備庫
本教程使用到的三個Python庫——streamlit, pandas 和 scikit-learn,可以通過pip install命令進行安裝。
安裝streamlit:
pip install streamlit
安裝pandas:
pip install pandas
安裝scikit-learn:
pip install -U scikit-learn
web應用程式代碼
現在就來一探究竟吧!我們要構建的應用程式只需不到50行代碼(確切地說是48行),如果刪除空行和注釋(佔12行),就可以降至36行。
import streamlit as st
import pandas as pd
from sklearn import datasets
from sklearn.ensemble importRandomForestClassifier
st.write("""
# Simple Iris Flower Prediction App
This app predicts the **Iris flower** type!
""")
st.sidebar.header('User InputParameters')
defuser_input_features():
sepal_length = st.sidebar.slider('Sepal length', 4.3, 7.9, 5.4)
sepal_width = st.sidebar.slider('Sepal width', 2.0, 4.4, 3.4)
petal_length = st.sidebar.slider('Petal length', 1.0, 6.9, 1.3)
petal_width = st.sidebar.slider('Petal width', 0.1, 2.5, 0.2)
data = {'sepal_length': sepal_length,
'sepal_width': sepal_width,
'petal_length': petal_length,
'petal_width': petal_width}
features = pd.DataFrame(data, index=[0])
return features
df =user_input_features()
st.subheader('User Inputparameters')
st.write(df)
iris = datasets.load_iris()
X= iris.data
Y= iris.target
clf =RandomForestClassifier()
clf.fit(X, Y)
prediction = clf.predict(df)
prediction_proba= clf.predict_proba(df)
st.subheader('Class labels andtheir corresponding index number')
st.write(iris.target_names)
st.subheader('Prediction')
st.write(iris.target_names[prediction])
#st.write(prediction)
st.subheader('PredictionProbability')
st.write(prediction_proba)
逐行解讀代碼
來看看每一行(或代碼塊)的作用:
導入庫
· 第1-4行:導入streamlit 和 pandas庫,分別稱為st和pd。具體來說,從scikitlearn庫中(sklearn)導入datasets軟體包,然後使用loader函數加載鳶尾花數據集(第30行)。最後將專門從sklearn.ensemble軟體包中導入RandomForestClassifier()函數。
側欄面板
· 第11行:通過使用st.sidebar.header()函數來添加側欄的標題文本。請注意,在st和header之間使用sidebar(所以是st.sidebar.header()函數)可以向streamlit庫傳達信息,把標題文本放在側欄面板中。
· 第13-23行:此處創建一個名為user_input_features()的自定義函數,該函數主要是將用戶輸入的參數進行整合(即4個花的特徵,可以通過滑動條接受用戶指定的值),並以數據幀的形式返回結果。
值得注意的是,每個輸入參數都將通過滑動按鈕接受用戶指定的值,如st.sidebar.slider(『Sepal length』, 4.3, 7.9, 5.4)表示萼片長度。四個輸入參數中的首個參數對應於在滑動按鈕上方指定的標籤文本,在本例中為「萼片長度」,而接下來的兩個值對應於滑動條的最小值和最大值。最後,末尾輸入參數表示加載web應用程式時選擇的默認值,該值設置為5.4。
模型建立
· 第25行:如上所述,以數據幀形式整合的用戶輸入參數信息將分配到df變量中。
· 第30-38行:該代碼塊適用於實際模型構建階段。
第30行—從sklearn.datasets軟體包中加載鳶尾花數據集,並將其分配給iris變量;
第31行—創建X變量,包含iris.data中提供的4個花的特徵(即萼片長度,萼片寬度,花瓣長度和花瓣寬度);
第32行—創建Y變量,與iris.target中提供的鳶尾花類標籤相關;
第34行—將隨機森林分類器(特別是RandomForestClassifier()函數)分配給clf變量;
第35行—通過clf.fit()函數使用X和Y變量作為輸入參數來訓練模型。這本質上意味著通過使用4個花的特徵(X)和類標籤(Y)訓練,來建立分類模型。
主面板
· 第6-9行:使用st.write()函數輸出文本,在本示例中使用該函數,以標記格式輸出此應用程式的標題。使用#符號表示標題文本(第7行),而後一行(第8行)提供應用程式的正常描述性文本。
· 第27-28行:第一部分將給出「User Input parameters」的子標題文本(使用st.subheader函數進行分配)。下一行將通過使用st.write()函數來顯示df數據幀的內容。
· 第40-41行:在主面板的第二部分中,輸出類標籤(即setosa、versicolor和virginica)及其相應索引號(即0、1和2)。
· 第43-44行:主面板的第三部分顯示的是預測類標籤。此處需要注意的是,prediction變量的內容(第45行)是預測的類索引號,如果要顯示類標籤(即setosa、versicolor和virginica),則需在iris.target_names[prediction]的括號內使用prediction變量作為參數。
· 第47-48行:主面板的第四部分也就是最後一部分顯示了預測概率。該概率值能夠識別預測類標籤的相對可信度(概率值越高,該預測的可信度就越高)。
運行web應用程式
因此,web應用程式的代碼被保存到iris-ml-app.py文件中,現在準備運行。可以在命令提示符(終端窗口)中輸入以下命令來運行該應用程式:
streamlit run iris-ml-app.py
之後會看到以下消息:
> streamlit run iris-ml-app.pyYou can now view yourStreamlit app in your browser.Local URL: http://localhost:8501
Network URL: http://10.0.0.11:8501
幾秒鐘會彈出一個網際網路瀏覽器窗口,通過網址http://localhost:8501引導用戶進入創建的web應用程式 ,如下所示:
大功告成!用Python創建了機器學習web應用程式就是這麼簡單,快去親自操作一下吧。
留言點讚關注
我們一起分享AI學習與發展的乾貨
如轉載,請後臺留言,遵守轉載規範