PyCaret-低代碼ML庫使用指南

在本文中,我將演示如何使用PyCaret快速輕鬆地構建機器學習項目併爲部署準備最終模型。

當我們研究監督的機器學習問題時,如果我們對結果感到滿意,那麼很容易看到隨機森林或梯度提升模型如何執行並停止實驗。如果您僅用一行代碼就可以比較許多不同的模型,該怎麼辦?如果您可以將數據科學過程的每個步驟(從功能工程到模型部署)減少到僅幾行代碼,該怎麼辦?

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
這正是PyCaret發揮作用的地方。PyCaret是一個高級,低代碼的Python庫,它使僅需幾行代碼即可輕鬆比較,訓練,評估,調整和部署機器學習模型。從本質上講,PyCaret基本上只是許多Scikit-learn,Yellowbrick,SHAP,Optuna和Spacy等數據科學庫的大型包裝。是的,您可以將這些庫用於相同的任務,但是如果您不想編寫大量代碼,PyCaret可以節省大量時間。

在本文中,我將演示如何使用PyCaret快速輕鬆地構建機器學習項目併爲部署準備最終模型。

安裝PyCaret

PyCaret是一個具有很多依賴項的大型庫。我建議使用Conda爲PyCaret創建一個虛擬環境,這樣安裝不會影響您現有的任何庫。要在Conda中創建和激活虛擬環境,請運行以下命令

conda create --name pycaret_env python=3.6 
conda activate pycaret_env

要安裝僅具有所需依賴項的默認較小版本的PyCaret,可以運行以下命令

pip install pycaret

要安裝完整版本的PyCaret,您應該運行以下命令。

pip install pycaret[full]

一旦安裝了PyCaret,請停用虛擬環境,然後使用以下命令將其添加到Jupyter。

conda deactivate 
python -m ipykernel install --user --name pycaret_env --display-name "pycaret_env"

現在,在瀏覽器中啓動Jupyter Notebook之後,您應該能夠看到將環境更改爲剛創建的選項的選項。
PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> Changing the Conda virtual environment in Jupyter.

導入庫

您可以在此GitHub存儲庫中找到本文的完整代碼。在下面的代碼中,我僅導入了Numpy和Pandas來處理此演示的數據。

import numpy as np 
import pandas as pd
讀取數據

對於此示例,我使用了Kaggle上可用的“加利福尼亞住房價格”數據集。在下面的代碼中,我將此數據集讀入一個數據框,並顯示了該數據框的前十行。

housing_data = pd.read_csv('./data/housing.csv')housing_data.head(10)

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> First ten rows of the housing dataset.

上面的輸出使我們對數據的外觀有所瞭解。數據主要包含數字特徵和一個分類特徵,用於每個房屋與海洋的接近度。我們試圖預測的目標列是“ median_house_value”列。整個數據集總共包含20,640個觀測值。

初始化實驗

現在我們有了數據,我們可以初始化一個PyCaret實驗,該實驗將對數據進行預處理併爲將在此數據集上訓練的所有模型啓用日誌記錄。

from pycaret.regression import * 
reg_experiment = setup(housing_data,  
                       target = 'median_house_value',  
                       session_id=123,  
                       log_experiment=True,  
                       experiment_name='ca_housing')

如下面的GIF中所示,運行上面的代碼會對數據進行預處理,然後生成帶有實驗選項的數據框。
PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> Pycaret setup function output.

比較基準模型

我們可以立即比較不同的基線模型,以找到具有使用compare_models函數的最佳K折交叉驗證性能的模型,如下面的代碼所示。在下面的示例中,出於演示目的,我已將XGBoost排除在外。

best_model = compare_models(exclude=['xgboost'], fold=5)

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> Results of comparing different models.

該函數將生成一個數據框,其中包含每個模型的性能統計信息,並突出顯示性能最佳的模型的指標,在本例中爲CatBoost迴歸器。

建立模型

我們還可以使用PyCaret在單行代碼中訓練模型。create_model函數僅需要一個與您要訓練的模型類型相對應的字符串。您可以在PyCaret文檔頁面上找到此功能的可接受字符串的完整列表以及相應的迴歸模型。

catboost = create_model('catboost')

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
create_model函數使用訓練後的CatBoost模型的交叉驗證指標來生成上面的數據框。

超參數調整

現在我們有了訓練有素的模型,我們可以通過超參數調整進一步優化它。只需一行代碼,我們就可以調整該模型的超參數,如下所示。

tuned_catboost = tune_model(catboost, n_iter=50, optimize = 'MAE')

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> Results of hyperparameter tuning with 10-fold cross-validation.

最重要的結果(在這種情況下爲平均指標)以黃色突出顯示。

可視化模型的性能

我們可以使用PyCaret創建許多圖表,以可視化模型的性能。PyCaret使用另一個稱爲Yellowbrick的高級庫來構建這些可視化文件。

殘留圖

默認情況下,plot_model函數將爲迴歸模型生成殘差圖,如下所示。

plot_model(tuned_catboost)

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> Residual plot for the tuned CatBoost model.

預測誤差

通過創建預測誤差圖,我們還可以將預測值相對於實際目標值可視化。

plot_model(tuned_catboost, plot = 'error')

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> Prediction error plot for the tuned CatBoost regressor.

上面的圖特別有用,因爲它爲我們提供了CatBoost模型的R²係數的直觀表示。在理想情況下(R²= 1),當預測值與實際目標值完全匹配時,此圖將僅包含沿虛線的點。

功能重要性

我們還可以可視化模型的功能重要性,如下所示。

plot_model(tuned_catboost, plot = 'feature')

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> Feature importance plot for the CatBoost regressor.

從上面的圖可以看出,在預測房屋價格時,位數中位數是最重要的特徵。由於此特徵對應於房屋建造區域的中位數收入,因此此評估非常合理。在高收入地區建造的房屋可能比低收入地區的房屋貴。

使用所有圖評估模型

我們還可以創建多個圖,以使用validate_model函數評估模型。

evaluate_model(tuned_catboost)

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> The interface created using the evaluate_model function.

解釋模型

interpret_model函數是用於解釋模型預測的有用工具。此函數使用一個稱爲SHAP的可解釋機器學習庫,我在下面的文章中介紹了該庫。

僅需一行代碼,我們就可以爲模型創建一個SHAPE蜂羣圖。

interpret_model(tuned_catboost)

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> SHAP plot produced by calling the interpret_model function.

根據上面的圖,我們可以看到中位數收入字段對預測房屋價值的影響最大。

自動機器學習

PyCaret還具有運行自動機器學習(AutoML)的功能。我們可以指定我們要優化的損失函數或度量,然後讓庫接管如下所示。

automlautoml_model = automl(optimize = 'MAE')

在此示例中,AutoML模型也恰好是CatBoost迴歸變量,我們可以通過打印出該模型進行確認。

print(automl_model)

運行上面的print語句將產生以下輸出:

< catboost.core.CatBoostRegressor at 0x7f9f05f4aad0 >
產生預測

預報模型功能允許我們通過使用來自實驗的數據或新的看不見的數據來生成預測。

pred_holdouts = predict_model(automl_model) 
pred_holdouts.head()

上面的predict_model函數爲交叉驗證期間用於驗證模型的保持數據集生成預測。該代碼還爲我們提供了一個數據框,其中包含針對AutoML模型生成的預測的性能統計信息。
PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> Predictions generated by the AutoML model.

在上面的輸出中,“標籤”列表示由AutoML模型生成的預測。我們還可以對整個數據集進行預測,如下面的代碼所示。

new_data = housing_data.copy() 
new_data.drop(['median_house_value'], axis=1, inplace=True) 
predictions = predict_model(automl_model, data=new_data) 
predictions.head()
保存模型

PyCaret還允許我們使用save_model函數保存經過訓練的模型。此功能將模型的轉換管道保存到pickle文件中。

save_model(automl_model, model_name='automl-model')

我們還可以使用load_model函數加載保存的AutoML模型。

loaded_model = load_model('automl-model') 
print(loaded_model)

打印出加載的模型將產生以下輸出:

Pipeline(memory=None, 
         steps=[('dtypes', 
                 DataTypes_Auto_infer(categorical_features=[], 
                                      display_types=True, features_todrop=[], 
                                      id_columns=[], ml_usecase='regression', 
                                      numerical_features=[], 
                                      target='median_house_value', 
                                      time_features=[])), 
                ('imputer', 
                 Simple_Imputer(categorical_strategy='not_available', 
                                fill_value_categorical=None, 
                                fill_value_numerical=None, 
                                numer... 
                ('cluster_all', 'passthrough'), 
                ('dummy', Dummify(target='median_house_value')), 
                ('fix_perfect', Remove_100(target='median_house_value')), 
                ('clean_names', Clean_Colum_Names()), 
                ('feature_select', 'passthrough'), ('fix_multi', 'passthrough'), 
                ('dfs', 'passthrough'), ('pca', 'passthrough'), 
                ['trained_model', 
                 ]], 
         verbose=False)

從上面的輸出中可以看到,PyCaret不僅在流水線的末尾保存了經過訓練的模型,還在流水線的開始處保存了特徵工程和數據預處理步驟。現在,我們在一個文件中有一個可用於生產的機器學習管道,我們不必擔心將管道的各個部分放在一起。

模型部署

現在我們已經準備好可以生產的模型管道,我們還可以使用deploy_model函數將模型部署到諸如AWS的雲平臺。如果打算將模型部署到S3存儲桶,則在運行此功能之前,必須運行以下命令來配置AWS命令行界面:

aws configure

運行上面的代碼將觸發一系列提示,提示您需要提供諸如AWS Secret Access Key之類的信息。完成此過程後,就可以使用deploy_model函數部署模型了。

deploy_model(automl_model, model_name = 'automl-model-aws',  
             platform='aws', 
             authentication = {'bucket' : 'pycaret-ca-housing-model'})

在上面的代碼中,我將AutoML模型部署到了AWS中名爲pycaret-ca-housing-model的S3存儲桶中。從這裏,您可以編寫一個AWS Lambda函數,該函數從S3中提取模型並在雲中運行。PyCaret還允許您使用load_model函數從S3加載模型。

MLflow用戶界面

PyCaret的另一個不錯的功能是,它可以使用稱爲MLfLow的機器學習生命週期工具來記錄和跟蹤您的機器學習實驗。運行以下命令將從本地主機在瀏覽器中啓動MLflow用戶界面。

!mlflow ui

PyCaret-低代碼ML庫使用指南PyCaret-低代碼ML庫使用指南
> MLFlow dashboard.

在上面的儀表板中,我們可以看到MLflow可以跟蹤您的PyCaret實驗的不同模型的運行情況。您可以查看性能指標以及實驗中每次運行的運行時間。

使用PyCaret的利與弊

如果您已經閱讀了此書,則現在對如何使用PyCaret有了基本的瞭解。雖然PyCaret是一個很棒的工具,但它有其自身的優缺點,如果您打算將其用於數據科學項目,則應注意這一點。

優點:

低代碼庫。
非常適合簡單的標準任務和通用機器學習。
爲迴歸,分類,自然語言處理,聚類,異常檢測和關聯規則挖掘提供支持。
使創建和保存模型的複雜轉換管道變得容易。
使可視化模型性能變得容易。

缺點:

到目前爲止,由於NLP實用程序僅限於主題建模算法,因此PyCaret對於文本分類而言並不理想。
PyCaret不是深度學習的理想選擇,並且不使用Keras或PyTorch模型。
您無法執行更復雜的機器學習任務,例如使用PyCaret(至少在版本2.2.0中)進行圖像分類和文本生成。
通過使用PyCaret,您將在某種程度上犧牲對簡單和高級代碼的控制。

概括

在本文中,我演示瞭如何使用PyCaret完成機器學習項目中的所有步驟,從數據預處理到模型部署。儘管PyCaret是有用的工具,但是如果您打算將其用於數據科學項目,則應瞭解其優缺點。PyCaret非常適合使用表格數據進行通用機器學習,但是從2.2.0版本開始,PyCaret不適用於更復雜的自然語言處理,深度學習和計算機視覺任務。但這仍然是一種節省時間的工具,誰知道,也許開發人員將來會增加對更復雜任務的支持?

如前所述,您可以在GitHub上找到本文的完整代碼。https://github.com/AmolMavuduru/PyCaretTutorial

本文地址:https://www.linuxprobe.com/pycaret-ml.html

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