深度學習框架 CatBoost 介紹

做者|Félix Revert
編譯|VK
來源|Towards Data Sciencehtml

介紹

我翻閱了CatBoost的文檔以後,我被這個強大的框架震驚了。CatBoost不只在你提供給它的任何數據集上構建了一個最精確的模型,其中只須要最少的數據準備。它還提供了迄今爲止最好的開源解釋工具,以及快速生成模型的方法。python

CatBoost引起了機器學習革命。學習使用它會提升你的技能。但更有趣的是,CatBoost對數據科學家(好比我本身)的現狀構成了威脅,由於我認爲在給定數據集的狀況下,創建一個高精度的模型是很乏味的。可是CatBoost正在改變這種情況。它使得每一個人均可以使用高度精確的模型。git

以極快的速度創建高精度模型

安裝

你試過在筆記本電腦上安裝XGBoost嗎?那你確定知道有多麻煩。可是在另外一端安裝運行CatBoost倒是小菜一碟。github

pip install catboost

這樣就安裝好了。bash

數據準備

與目前大多數可用的機器學習模型不一樣,CatBoost只須要最少的數據準備。它能處理:框架

  • 數值變量的缺失值機器學習

  • 沒有編碼的分類變量函數

    注意:對於分類變量,必須事先處理缺失值。替換爲新類別「missing」或最其餘經常使用的類別。工具

  • 對於GPU用戶,它也能處理文本變量。學習

不幸的是,我沒法測試這個功能,由於我正在一臺沒有GPU的筆記本電腦上工做。

構建模型

與XGBoost同樣,你擁有熟悉的sklearn語法和一些特定於CatBoost的附加功能。

from catboost import CatBoostClassifier # 或者 CatBoostRegressor
model_cb = CatBoostClassifier()
model_cb.fit(X_train, y_train)

或者,若是你想要一個關於模型如何學習以及是否開始過擬合的可視化界面,請使用plot=True並在eval_set參數中插入測試集:

from catboost import CatBoostClassifier # 或者 CatBoostRegressor
model_cb = CatBoostClassifier()
model_cb.fit(X_train, y_train, plot=True, eval_set=(X_test, y_test))

注意,你能夠同時顯示多個度量,甚至更人性化的度量,如準確度或精確度。此處列出了支持的指標:https://catboost.ai/docs/concepts/loss-functions-classification.html。

請參見下面的示例:

你甚至可使用交叉驗證,在不一樣的分割上觀察模型準確度的平均和標準誤差:

微調

CatBoost與XGBoost很是類似。要對模型進行適當的微調,首先將early_stopping_rounds進行設置(如10或50),而後開始調整模型的參數。

訓練速度

無GPU

從他們的基準測試中,你能夠看到CatBoost比XGBoost更快,而且與LightGBM相對相似。衆所周知,LightGBM的訓練速度很快。

有GPU

不過,說到GPU,真正的魔力就來了。

即便使用相對較老的GPU,如K40(2013年發佈),訓練時間也將被至少快4倍,而其餘更新的CPU最多能快40倍。

模型的解釋

CatBoost的做者們明白的一件事是,這不只僅是一個玩精確度的遊戲。爲何在XGBoost和LightGBM可用時要使用CatBoost呢。因此,在可解釋性方面,CatBoost提供了開箱即用的函數。

特徵重要性

CatBoost提供了3種不一樣的方法:PredictionValuesChange、LossFunctionChange和InternalFeatureImportance。這裏有詳細的文檔:https://catboost.ai/docs/concepts/fstr.html

局部可理解性

對於局部可理解性,CatBoost附帶SHAP,SHAP一般被認爲是惟一可靠的方法。

shap_values = model.get_feature_importance(Pool(X, y), type='ShapValues')

官方也提供了教程:https://github.com/catboost/tutorials/blob/master/model_analysis/shap_values_tutorial.ipynb。你可使用進行局部可理解性操做以及獲取特徵重要性。

邊際效應

到目前爲止,這是我最喜歡的東西。隨着高精度的商品化(特別是隨着AutoML的興起),當今從更深層次上了解這些高精度模型變得愈來愈重要。

根據經驗,如下圖表已成爲模型分析的標準。CatBoos在它的包中直接提供它。

在這個圖標上你觀察到

  1. 綠色的是數據分佈

  2. 藍色的是每一個箱子的平均目標值

  3. 橙色的是每一個箱子的平均預測值

  4. 紅色的是部分依賴圖( Partial Dependence

在生產中使用CatBoost模型

在生產中實現你的模型變得很是容易。下面是如何導出CatBoost模型。

使用.save_model()方法能夠得到如下幫助文檔:

Python和C++的導出

model_cb.save_model(‘model_CatBoost.py’, format=’python’, pool=X_train)

執行後在你的repo中會有一個生成好的.py文件,以下所示:

這時候模型已經準備好生產了!並且你不須要在機器上設置一個特定的環境來得到新的分數。只須要Python 3就能夠了!

二進制文件輸出

二進制顯然是得到新數據的最快選擇。代碼中改爲輸出.cbm文件。

載入時使用如下代碼從新加載模型:

from catboost import CatBoost
model = CatBoost()
model.load_model('filename', format='cbm')

其餘有用的提示

Verbose = 50

大多數模型中一般都有詳細的輸入,以便查看你過程的進展狀況。CatBoost也有,但比其餘的稍好一點。例如,使用verbose=50將每50次迭代顯示一次訓練錯誤,而不是每次迭代顯示一次,由於若是有許屢次迭代,這可能會很煩人。

使用verbose=10訓練同一模型。檢查起來好多了。

注意,剩餘時間也會顯示出來。

模型比較

微調模型須要時間。一般,你可能有幾個好的參數列表。爲了將其提高結果你甚至可使用不一樣的參數集學習模型來比較,以便幫助你對要選擇的參數的最終列表作出決定。

訓練時保存模型

你有一個大數據集,你懼怕訓練過久?你能夠隨時保存模型,這樣你過程當中的任何中斷都沒必要意味着對模型進行從新擬合!如下是相關文檔:https://catboost.ai/docs/features/snapshots.html#snapshots

學習資料

Catboost的文檔很是有用,即便你認爲你對不少模型瞭如指掌,他們的文檔也能夠幫助你。

原文連接:https://towardsdatascience.com/why-you-should-learn-catboost-now-390fb3895f76

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方文檔:
http://sklearn123.com/

歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/

相關文章
相關標籤/搜索