kaggle神器:教你簡單部署XGBoost

點擊上方關注,All in AI中國

XGBoost現在是用於結構化數據的領先機器學習算法之一。它在眾多的kaggle競賽中大放異彩,並因其良好的表現而被業界廣泛應用。

kaggle神器:教你簡單部署XGBoost

但是,許多使用過XGBoost的人可能會遇到這些問題:

  1. 模型太複雜,就像一個黑盒子
  2. 很難解釋結果
  3. 在生產環境中部署訓練有素的模型是件令人頭疼的事情

對於1,要很好地理解XGBoost背後的算法,一個好方法是閱讀本文(由XGBoost的創建者所寫),你可能會發現這個演示很有用。對於2,這是迄今為止我發現的最好的文章(Scott Lundberg) https://towardsdatascience.com/interpretable-machine-learning-with-xgboost-9ec80d148d27,它解釋了XGBoost計算整體特徵重要性的三種不同方式,並且還解釋了使用SHAP算法來計算每個單獨記錄的特徵重要性。

本文的重點是3,將向讀者展示如何使用一些簡單的編碼將XGBoost模型轉換為.py文件,這個.py文件的唯一依賴是“numpy”包。因此,在您訓練XGB模型之後,您可以輕鬆地將模型部署在另一個不需要XGBoost包的環境中。

本教程分為幾個部分:下載數據並訓練模型→將模型轉換為.py文件→使用.py文件預測測試數據。

步驟0.下載jupyter筆記本

此筆記本包含以下所有代碼。將它放在目標文件夾中。

步驟1.下載數據並訓練模型

讓我們使用著名的泰坦尼克號數據集來構建玩具模型。從鏈接下載train.csv和test.csv。創建一個子文件夾“/ data”並將.csv放在那兒。

因為XGBoost只接受數字輸入,所以讓我們跳過分類變量編碼並隨機選擇一些數字列進行建模。

kaggle神器:教你簡單部署XGBoost

此XGBoost模型生成了3個決策樹,每個決策樹的最大高度為3。由於gamma(分割數的懲罰常數)設置為較大的值,因此可防止某些樹節點的分裂。

決策樹看起來是這樣的:

kaggle神器:教你簡單部署XGBoost

每個記錄的預測分數由“基礎分數+來自所有樹木的最終葉子值”給出。

步驟2.將模型轉換為.py文件

在XGBoost Python API中,您可以找到允許您將模型轉儲為字符串或.txt文件的函數,或保存模型以供以後使用。 但是沒有API可以將模型轉儲為Python函數。有個訣竅:我們首先將模型轉儲為字符串,然後使用正則表達式解析長字符串並將其轉換為.py文件。

kaggle神器:教你簡單部署XGBoost

完成此工作的代碼片段:

kaggle神器:教你簡單部署XGBoost

通過模型訓練中使用的基本分數和訓練模型,我們能夠將其轉換為.py模型,該模型僅需要“numpy”包(用於缺失值處理)。

kaggle神器:教你簡單部署XGBoost

生成的“xgb_model.py”的一部分如下所示:

kaggle神器:教你簡單部署XGBoost

步驟3.使用.py文件預測測試數據。

我們現在可以導入剛剛創建的xgb_model.py,並且可以直接執行預測。

kaggle神器:教你簡單部署XGBoost

讓我們將它與XGBoost模型產生的預測進行比較。

kaggle神器:教你簡單部署XGBoost

結果相符。

一些警告:

  • 這些代碼在python 3.5.2 + xgboost 0.6下運行良好。 不保證為其他版本生成正確的結果。
  • 我的代碼中沒有進行任何錯誤處理。
  • .py用於對python字典進行評分,但您可以進行一些小修改以適合您的用例。
  • 在生成.py文件之前,請確保目標文件夾中沒有與該名稱相同的.py文件。
kaggle神器:教你簡單部署XGBoost

運營:李佳惠


分享到:


相關文章: