使用PyCaret構建機器學習模型

作者|LAKSHAY ARORA 編譯|VK 來源|Analytics Vidhya

概述

  • PyCaret是一個超級有用的Python庫,用於在短時間內執行多個機器學習任務

  • 學習如何依賴PyCaret在幾行代碼中構建複雜的機器學習模型

介紹

我建立的第一個機器學習模型是一個相當麻煩的代碼塊。我仍然記得構建一個集成模型,它需要許多行代碼,它十分需要一個嚮導來解開這些混亂的代碼!

當涉及到構建可解釋的機器學習模型時,尤其是在行業中,編寫高效的代碼是成功的關鍵。所以我強烈建議使用PyCaret庫。

我希望PyCaret在我的剛學習機器學習的日子裏出現!這是一個非常靈活和有用的庫,我在最近幾個月已經相當依賴。我堅信任何有志成爲數據科學或分析專業人士的人都會從使用PyCaret中受益匪淺。

我們將看到PyCaret到底是什麼,包括如何在你的機器上安裝它,然後我們將深入研究如何使用PyCaret來構建可解釋的機器學習模型,包括集成模型。

目錄

  1. 什麼是PyCaret?爲什麼要使用它?

  2. 安裝PyCaret

  3. 熟悉PyCaret

  4. 使用PyCaret訓練我們的機器學習模型

  5. 使用PyCaret構建集成模型

  6. 分析模型

  7. 做出預測

  8. 保存並加載模型

什麼是PyCaret?爲什麼要使用它?

PyCaret是Python中一個開源的機器學習庫,它可以幫助你從數據準備到模型部署。它很容易使用,你可以用一行代碼完成幾乎所有的數據科學項目任務。

我發現PyCaret非常方便。以下是兩個主要原因:

  • PyCaret是一個代碼庫,它使你的工作效率更高。你可以在代碼上花更少的時間,做更多的實驗

  • 它是一個易於使用的機器學習庫,將幫助你執行端到端的機器學習實驗,無論是輸入缺失值、編碼分類數據、特徵工程、超參數調整,還是構建集成模型

安裝PyCaret

這是最直接的。可以直接使用pip安裝PyCaret的第一個穩定版本v1.0.0。只需在Jupyter Notebook中運行以下命令即可開始:

!pip3 install pycaret

熟悉PyCaret

問題陳述和數據集

在本文中,我們將解決一個分類問題。我們有一個銀行數據集,包括客戶年齡、經驗、收入、教育程度,以及他/她是否有信用卡。該行希望建立一個機器學習模型,幫助他們識別購買個人貸款可能性更高的潛在客戶。

數據集有5000行,我們保留了4000行用於訓練模型,剩下的1000行用於測試模型。你可以在這裏找到本文中使用的完整代碼和數據集。

https://github.com/lakshay-arora/PyCaret-Example

讓我們從使用Pandas庫讀取數據集開始:

# 導入panda以讀取CSV文件
import pandas as pd
# 讀取數據
data_classification = pd.read_csv('datasets/loan_train_data.csv')
# 查看數據的頂行
data_classification.head()

在PyCaret中啓動機器學習項目之前的第一步是設置環境。這只是一個兩步的過程:

  1. 導入模塊:根據要解決的問題類型,首先需要導入模塊。在PyCaret的第一個版本中,有6個不同的模塊可用:迴歸、分類、聚類、自然語言處理(NLP)、異常檢測和關聯挖掘規則。在本文中,我們將解決一個分類問題,因此我們將導入分類模塊
  2. 初始化設置:在這個步驟中,PyCaret執行一些基本的預處理任務,比如忽略id和Date列、填充丟失的值、對分類變量進行編碼,以及在其餘建模步驟中將數據集拆分爲train test。當你運行setup函數時,它將首先確認數據類型,然後如果你按enter,它將創建環境。
# 導入分類模塊
from pycaret import classification
# 設置環境
classification_setup = classification.setup(data= data_classification, target='Personal Loan')

我們都準備好探索PyCaret了!

使用PyCaret訓練我們的機器學習模型

訓練模型

用PyCaret訓練一個模型非常簡單。你只需要使用create_model函數,該函數只接受一個參數(模型縮寫爲字符串)。

在這裏,我們將首先訓練一個決策樹模型,我們必須通過“dt”,它將返回一個表,其中包含用於分類模型的常用評估指標的k倍交叉驗證分數。

以下是用於監督學習的評估指標:

  • 分類:Accuracy, AUC, Recall, Precision, F1, Kappa
  • 迴歸:MAE、MSE、RMSE、R2、RMSLE、MAPE

你可以查看PyCaret的文檔頁以瞭解更多縮寫。

https://pycaret.org/create-model/

# 建立決策樹模型
classification_dt = classification.create_model('dt')

同樣,爲了訓練XGBoost模型,只需要傳遞字符串“XGBoost”:

# 構建xgboost模型
classification_xgb = classification.create_model('xgboost')

超參數調整

我們可以通過使用tune_model函數來調整機器學習模型的超參數,該函數接受一個參數,模型縮寫字符串(與我們在create_model函數中使用的相同)。

PyCaret爲我們提供了很多靈活性。例如,我們可以使用tune_model函數中的fold參數定義摺疊次數。或者我們可以使用n_iter參數更改迭代次數。增加nòiter參數將明顯增加訓練時間,提供更好的性能。

讓我們訓練一個CatBoost模型:

# 構建和調優catboost模型
tune_catboost = classification.tune_model('catboost')

使用PyCaret構建集成模型

機器學習中的集成模型將來自多個模型的決策結合起來,以提高整體性能。

在PyCaret中,我們可以用一行代碼創建bagging、boosting、blending和stacking集成模型。

讓我們在這裏訓練一個集成模型。它還將返回一個表,其中包含常用評估指標的k折交叉驗證分數:

# boosting
boosting = classification.ensemble_model(classification_dt, method= 'Boosting')

另一個非常著名的合成技術是blending。你只需要傳遞在blend_models函數列表中創建的模型。

# blending
blender = classification.blend_models(estimator_list=[classification_dt, classification_xgb])

就這樣!你只需要用PyCaret編寫一行代碼就可以完成大部分工作。

比較模型

這是PyCaret庫的另一個有用功能。如果不想逐個嘗試不同的模型,可以使用compare models函數,它將爲所有可用模型訓練和比較通用的評估度量。

此函數僅在pycaret.classification以及 pycaret.regression模塊中。

# 比較不同分類模型的性能
classification.compare_models()

分析模型

現在,在訓練模型之後,下一步是分析結果。從商業角度來看,這特別有用,對吧?分析PyCaret中的模型也很簡單。只需一行代碼,你就可以執行以下操作:

  1. 對模型結果繪圖:分析PyCaret中的模型性能與編寫plot_model一樣簡單。可以繪製決策邊界、精確召回曲線、驗證曲線、殘差圖等。此外,對於羣集模型,可以繪製肘部圖和輪廓圖。對於文本數據,可以繪製字雲圖、bigram圖和trigram頻率圖等。
  2. 解釋結果:通過分析重要特性,解釋模型結果有助於調試模型。這是工業級機器學習項目中至關重要的一步。在PyCaret中,我們可以用一行代碼通過SHAP值和相關圖來解釋模型

對模型結果繪圖

可以通過提供模型對象作爲參數和所需的打印類型來打印模型結果。繪製AUC-ROC曲線和決策邊界:

# AUC-ROC 圖
classification.plot_model(classification_dt, plot = 'auc')

# 決策邊界
classification.plot_model(classification_dt, plot = 'boundary')

繪製訓練模型的精確召回曲線和驗證曲線:

# Precision Recall 曲線
classification.plot_model(classification_dt, plot = 'pr')

# 驗證曲線
classification.plot_model(classification_dt, plot = 'vc')

評估我們的模型

如果你不想單獨繪製所有這些可視化效果,那麼PyCaret庫還有另一個驚人的功能——evaluate_model。在這個函數中,你只需要傳遞model對象,PyCaret將創建一個交互式窗口,供你以所有可能的方式查看和分析模型:

# 評估模型
classification.evaluate_model(classification_dt)

解釋我們的模型

在大多數機器學習項目中,解釋複雜模型是非常重要的。它通過分析模型認爲什麼是重要的來幫助調試模型。在PyCaret中,這一步與編寫解釋模型以獲取Shapley值一樣簡單。

# 解釋模型:SHAP
classification.interpret_model(classification_xgb)

讓我們嘗試繪製相關圖:

# 解釋模型:相關性
classification.interpret_model(classification_xgb,plot='correlation')

做出預測

最後,我們將對看不見的數據進行預測。爲此,我們只需要傳遞我們將用於預測和數據集的模型。確保它的格式與我們之前設置環境時提供的格式相同。

PyCaret構建一個包含所有步驟的管道,並將未看到的數據傳遞到管道中,並給出結果。

讓我們看看如何預測數據的標籤:

# 讀取測試數據
test_data_classification = pd.read_csv('datasets/loan_test_data.csv')
# 做出預測
predictions = classification.predict_model(classification_dt, data=test_data_classification)
# 查看預測
predictions

保存並加載模型

現在,一旦構建並測試了模型,我們就可以使用save_model函數將其保存在pickle文件中。傳遞要保存的模型和文件名,即:

# 保存模型
classification.save_model(classification_dt, 'decision_tree_1')

我們可以稍後加載此模型並預測數據上的標籤:

# 加載模型
dt_model = classification.load_model(model_name='decision_tree_1')

結尾

它真的很容易使用。我個人發現PyCaret對於在時間緊迫的情況下快速生成結果非常有用。

在不同類型的數據集上練習使用它——你會越充分利用它,就越能真正掌握它的實用性!它甚至只需要一行代碼就可以在AWS等雲服務上支持模型部署。

原文鏈接:https://www.analyticsvidhya.com/blog/2020/05/pycaret-machine-learning-model-seconds/

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章