PyCaret 機器學習神器
使用 R 語言做為資料科學開發的,一定非常熟悉 Caret 這個套件,從官方文擋就可以看出他的強大,從基本的補缺失值、資料前處理,到複雜特徵工程、Sampling、Cross Validation、Model training,都可以一手包辦,可以說是 R 版的 Python Sklearn。
然而在 R 上面好好的套件,居然出了 Python 版本,而且還集所有機器學習套件大成,建立低程式碼的訓練流程,自從 PyCaret 2.0 版上線後,功能簡直神到不行,我們下面就來演練一下 Pycaret 的強大之處吧。
以下範例使用 Kaggle 上經典的鐵達尼號存活預測作為示範。
1. 環境準備
首先將下載 Kaggle 的 dataset,讀取資料確認資料樣態:
看起來沒問題,我們進入下一步囉。
2. 資料探勘
資料探勘會影響到特徵工程處理,我們從資料面觀察到幾個線索,想法如下(以下非絕對作法,單看個人探勘思維):
- 看過電影都知道,老弱婦孺先上逃生艇,Age 和 Sex 肯定是重要變數。
- 把年齡、票價作離散化切檻。
- 客艙 Cabin 的第一個字母感覺有意義,獨立拉出來。
- 把姓名的 Mr. Ms. 稱謂分離出來當特徵。
- 刪掉 Ticket、Name、Embarked 感覺沒有用的欄位。
把上述想法轉為程式碼,進行特徵工程處理:
接下來我們切訓練資料的 20% 作為模型驗證資料:
目前看起來還剩下 Encoding 的動作,但我們就請 Pycaret 來代勞吧。
3. PyCaret 模型訓練
安裝完 Pycaret 套件後,使用下面語法設定訓練環境,可以看到他可以指定類別變數,減去 Encoding 的流程,詳細參數可以參考這裡:
他會顯示初步探勘的結果,他會要你確認結果後,在中間的框中按下 Enter確認。
如果是跑 script 的方式要略過此步驟,可以參數加上 silent = True。跑一下後會顯示你模型目前給他的資料處理流程:
接下來使用 compare_models() 來比較個演算法的表現,找出最佳的模型,以切 5 fold :
compare_models(fold = 5)
從上面可以看到,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 快速建模系統,值得大家嘗試看看。