PyCaret 機器學習神器

PyCaret 在 Kaggle 實戰應用

Chris Lee
工程隨寫筆記
May 9, 2021

--

使用 R 語言做為資料科學開發的,一定非常熟悉 Caret 這個套件,從官方文擋就可以看出他的強大,從基本的補缺失值、資料前處理,到複雜特徵工程、Sampling、Cross Validation、Model training,都可以一手包辦,可以說是 R 版的 Python Sklearn。

然而在 R 上面好好的套件,居然出了 Python 版本,而且還集所有機器學習套件大成,建立低程式碼的訓練流程,自從 PyCaret 2.0 版上線後,功能簡直神到不行,我們下面就來演練一下 Pycaret 的強大之處吧。

以下範例使用 Kaggle 上經典的鐵達尼號存活預測作為示範。

1. 環境準備

首先將下載 Kaggle 的 dataset,讀取資料確認資料樣態:

看起來沒問題,我們進入下一步囉。

2. 資料探勘

資料探勘會影響到特徵工程處理,我們從資料面觀察到幾個線索,想法如下(以下非絕對作法,單看個人探勘思維):

  1. 看過電影都知道,老弱婦孺先上逃生艇,Age 和 Sex 肯定是重要變數。
  2. 把年齡、票價作離散化切檻。
  3. 客艙 Cabin 的第一個字母感覺有意義,獨立拉出來。
  4. 把姓名的 Mr. Ms. 稱謂分離出來當特徵。
  5. 刪掉 Ticket、Name、Embarked 感覺沒有用的欄位。

把上述想法轉為程式碼,進行特徵工程處理:

接下來我們切訓練資料的 20% 作為模型驗證資料:

目前看起來還剩下 Encoding 的動作,但我們就請 Pycaret 來代勞吧。

3. PyCaret 模型訓練

安裝完 Pycaret 套件後,使用下面語法設定訓練環境,可以看到他可以指定類別變數,減去 Encoding 的流程,詳細參數可以參考這裡

他會顯示初步探勘的結果,他會要你確認結果後,在中間的框中按下 Enter確認。

如果是跑 script 的方式要略過此步驟,可以參數加上 silent = True。跑一下後會顯示你模型目前給他的資料處理流程:

接下來使用 compare_models() 來比較個演算法的表現,找出最佳的模型,以切 5 fold :

從上面可以看到,Pycaret 幫你用多個演算法做初步模型比較,而且是連 Kaggle 較流行的 xgboost 及 lightgbm 都有跑,程式碼簡潔許多。

如果針對某個演算法要加參數,可以用 create_model 來個別訓練,以最普遍的 Logistic Regression 為例:

其實後面都可以自由帶參數的,為了省時間我們都使用 default 跑。然後厲害的來了,機器學習中比較高階的技巧 Stacking 也有支援,我們先用三種不同演算法建立子模型,然後用一個羅吉斯回歸做 level 2,程式如下:

如果要將模型儲存,可以使用 save_model 函數,而且是存成最泛用的 pkl 檔。

最後我們讀取模型,套用剛剛切出來的測試資料,Label 就是模型預測的結果:

最後看一下測試資料的 accuracy,隨便做就有 84% 左右的水準,還不賴。

既然程式碼量這麼少,我們就來做個結合18個演算法的 stacking 模型,並使用 xgboost 作第二層預測:

還不賴,上升到 86% 的水準。

我們將 Kaggle 的測試資料進行預測後,提交上傳看看,分數為 0.77:

雖然只是很粗略的用大量演算法去運算,都還沒有調參及複雜的特徵工程,但分數已經令人相當滿意,而且程式碼撰寫時間極短,可見 Pycatet 的驚人之處。

這種低代碼的 framework 應用度相當廣泛,甚至可以結合 streamlit 之類的建立 GUI 快速建模系統,值得大家嘗試看看。

--

--

Chris Lee
工程隨寫筆記

隱身在金融業的資料科學家,部分文章會在個人部落格唷 https://chrisnote.com/