如何構建真實世界可用的 ML 模型?
Python 作為當前機器學習中使用最多的一門編程語言,有很多對應的機器學習庫,最常用的莫過於 scikit-learn 了。本文我們介紹下如何使用sklearn進行實時預測。先來看下典型的機器學習工作流。
綠色方框圈出來的表示將數據切分為訓練集和測試集。
紅色方框的上半部分表示對訓練數據進行特徵處理,然後再對處理後的數據進行訓練,生成 model。
紅色方框的下半部分表示對測試數據進行特徵處理,然後使用訓練得到的 model 進行預測。
紅色方框的右下角部分表示對模型進行評估,評估可以分為離線和在線。
典型的 ML 模型
介紹完了典型的機器學習工作流了之後,來看下典型的 ML 模型。
上面的模型對鳶尾花數據進行訓練生成一個模型,之後該模型對測試數據進行預測,預測結果為每條數據屬於哪種類別。
模型的保存和載入
上面我們已經訓練生成了模型,但是如果我們程序關閉後,保存在內存中的模型對象也會隨之消失,也就是說下次如果我們想要使用模型預測時,需要重新進行訓練。如何解決這個問題呢?
很簡單,既然內存中的對象會隨著程序的關閉而消失,我們能不能將訓練好的模型保存成文件。如果需要預測的話,直接從文件中載入生成模型呢?答案是可以的。
sklearn 提供了 joblib 模型,能夠實現完成模型的保存和載入。
構建實時預測
前面說到的運行方式是在離線環境中運行,在真實世界中,我們很多時候需要在線實時預測。一種解決方案是將模型服務化,在我們這個場景就是,我告訴你一個鳶尾花的 sepal_length, sepal_width, petal_length, petal_width 之後,你能夠快速告訴我這個鳶尾花的類型,藉助 flask 等 web 框架,開發一個 web service,實現實時預測。
因為依賴於 flask 框架,沒有安裝的需要安裝下:
創建一個 ml_web.py 文件,內容如下:
在命令行啟動它:
在 PostMan(也可以在瀏覽器中打開) 中打開 http://127.0.0.1:8000/ml/predict_iris ,得到以下結果:
可以看到,這裡提示我們輸入 sepal_length, sepal_width, petal_length, petal_width 參數,所以我們需要添加上參數重新構造一個請求 url:http://127.0.0.1:8000/ml/predict_iris?sepal_length=10&sepal_width=1&petal_length=3&petal_width=2。
再次請求得到的結果如下:
可以看到,模型返回的結果為 2,也就是說模型認為這個鳶尾花的類別是 2。
總結
在真實世界中,我們經常需要將模型進行服務化。這裡我們藉助 flask 框架,將 sklearn 訓練後生成的模型文件載入到內存中,針對每次請求傳入不同的特徵來實時返回不同的預測結果。
作者:1or0,專註於機器學習研究。
聲明:本文為公眾號 AI派 投稿,版權歸對方所有。


※程序員分析了 50 萬條拼多多商品數據,告訴你到底是消費升級還是降級!
※再升級!這份AI工程師必備能力清單了解一下!
TAG:CSDN |