字幕組雙語原文:Python簡化代碼機器學習庫PyCaret 2.0發布
英語原文:Announcing PyCaret 2.0
翻譯:雷鋒字幕組(Shangru)
我們激動的宣布,PyCaret第二版今天發布!
PyCaret是一個開源的,低代碼的Python機器學習庫,旨在自動化機器學習工作流。它是端到端的機器學習和模型管理工具。它可以加速機器學習的實驗周期,提高你的效率。
和其他開源機器學習庫相比,PyCaret是低代碼的。它可以用幾個單詞取代上百行代碼。這大大提高了實驗的速度和效率。在版本說明 release notes 中查看PyCaret 2.0的更多細節。
數據準備 模型訓練 超參數調優(從左到右)
分析和截圖 模型選擇 實驗日誌記錄(從左到右)
PyCaret 2.0 功能
安裝PyCaret非常簡單,只需要幾分鐘時間。我們強烈建議使用虛擬環境,以避免和其他庫的潛在衝突。以下示例代碼創建了一個conda環境,並在該conda環境下安裝pycaret
# 創建一個 conda 環境 conda create --name yourenvname python=3.6 # 激活環境 conda activate yourenvname # 安裝 pycaret pip install pycaret==2.0 # create notebook kernel linked with the conda environment python -m ipykernel install --user --name yourenvname --display-name "display-name" |
如果你使用Azure notebook或者Google Colab,運行下列代碼安裝PyCaret
!pip install pycaret==2.0 |
所有的依賴項會在使用pip安裝PyCaret時自動安裝。點擊Click here這裡查看完整的依賴列表。
在PyCaret中,任何機器學習實驗的第一步是配置環境。這需要導入相關模型並通過傳遞數據框(dataframe)和目標變量的名字來初始化配置函數。示例代碼如下:
# 導入模塊 from pycaret.classification import * # 初始化配置 (在Notebook環境內) clf1 = setup(data, target = 'target-variable') # 初始化配置 (在 Notebook 環境外) clf1 = setup(data, target = 'target-variable', html = False) # 初始化配置 (在 Kaggle / GitHub actions / CI-CD 管道等遠程執行) clf1 = setup(data, target = 'target-variable', html = False, silent = True) |
輸出示例:
輸出片段
所有的預處理變換在配置函數中被調用。PyCaret提供了超過20種不同的,可在配置函數內調用的預處理變換。點擊這裡 Click here 了解PyCaret更多的預處理能力。
樣本和劃分:訓練/測試劃分;採樣
數據準備:缺失數據補全;獨熱編碼;內在順序編碼;Cardinal編碼;不平衡修正
縮放和轉換:歸一化;轉換
特徵工程:特徵交互;多項式特徵;組特徵;二元數值特徵
特徵選擇:特徵重要性;共線性移除;PCA;忽略低方差
無監督:創建聚類;異常移除
https://www.pycaret.org/preprocessing
這是所有監督學習模型任務中,我們推薦的第一步。該函數會使用模型的默認超參數來訓練所有模型,並通過交叉檢驗來評估性能。它返回一個已訓練的模型的對象類。可使用的評估測度包括:
分類:準確度,AUC,召回率,精確率,F1,Kappa,MCC
回歸: MAE, MSE, RMSE, R2, RMSLE, MAPE
這裡有幾種使用 compare_models 函數的方法:
# 導入 classification 模塊 from pycaret.classification import * # 初始化配置 clf1 = setup(data, target = 'name-of-target') # 返回最優模型 best = compare_models() # 返回基於召回率的最有模型 best = compare_models(sort = 'Recall') #默認為準確率 'Accuracy' # 比較特定模型 best_specific = compare_models(whitelist = ['dt','rf','xgboost']) # 排除特定模型 best_specific = compare_models(blacklist = ['catboost','svm']) # 返回3個基於準確率的最有模型 top3 = compare_models(n_select = 3) |
輸出示例:
模型創建
模型創建函數使用默認超參數訓練模型並使用交叉驗證評估模型性能。該函數是幾乎所有其他PyCaret函數的底。它返回訓練模型對象類。以下是幾種模型使用方法:
# 導入 classification 模塊 from pycaret.classification import * # 初始化配置 clf1 = setup(data, target = 'name-of-target') # 訓練 logistic 回歸模型 lr = create_model('lr') #lr is the id of the model # 通過模型庫來查看所有模型 models() # 使用5折交叉驗證訓練隨機森林模型 rf = create_model('rf', fold = 5) # 不適用交叉驗證訓練SVM模型 svm = create_model('svm', cross_validation = False) # 訓練xgboost模型,其中 max_depth = 10 xgboost = create_model('xgboost', max_depth = 10) # 在gpu上訓練xgboost模型 xgboost_gpu = create_model('xgboost', tree_method = 'gpu_hist', gpu_id = 0) #0 is gpu-id # 在多個learning_rate下 訓練多個lightgbm 模型 lgbms = [create_model('lightgbm', learning_rate = i) for i in np.arange(0.1,1,0.1)] # 訓練自定義模型 from gplearn.genetic import SymbolicClassifier symclf = SymbolicClassifier(generation = 50) sc = create_model(symclf) |
輸出示例:
create_model函數的輸出示例
要了解更多關於模型創建函數,點擊這裡 click here.
模型調優函數以估計器的形式調優模型超參數。它在預設定的調優網格( 可完全定製化 )上進行隨機網格搜索。以下是幾種函數使用方法:
# 導入classification 模塊 from pycaret.classification import * # 初始化配置 clf1 = setup(data, target = 'name-of-target') # 訓練一個決策樹模型 dt = create_model('dt') # 調優決策樹的一個超參數 tuned_dt = tune_model(dt) # 增加n_iter來調參 tuned_dt = tune_model(dt, n_iter = 50) # 基於最優化AUC調參 tuned_dt = tune_model(dt, optimize = 'AUC') #default is 'Accuracy' # 在 custom_grid 上調參 params = {"max_depth": np.random.randint(1, (len(data.columns)*.85),20), "max_features": np.random.randint(1, len(data.columns),20), "min_samples_leaf": [2,3,4,5,6], "criterion": ["gini", "entropy"] } tuned_dt_custom = tune_model(dt, custom_grid = params) # 動態調優多個模型 top3 = compare_models(n_select = 3) tuned_top3 = [tune_model(i) for i in top3] |
要了解更多模型調優函數,點擊這裡 click here.
有幾種函數可用於集成底學習器。 ensemble_model, blend_models 和stack_models是其中三種。 以下是幾種函數使用方法:
# 導入classification 模型 from pycaret.classification import * # 初始化配置 clf1 = setup(data, target = 'name-of-target') # 訓練一個決策樹模型 dt = create_model('dt') # 基於dt訓練一個 bagging 分類器 bagged_dt = ensemble_model(dt, method = 'Bagging') # 基於dt訓練一個帶有100個估計器的adaboost 分類器 boosted_dt = ensemble_model(dt, method = 'Boosting', n_estimators = 100) # 訓練一個包括庫中所有模型的投票分類器 blender = blend_models() # 訓練一個基於特定模型的投票分類器 dt = create_model('dt') rf = create_model('rf') adaboost = create_model('ada') blender_specific = blend_models(estimator_list = [dt,rf,adaboost], method = 'soft') # 動態訓練一個投票分類器 blender_top5 = blend_models(compare_models(n_select = 5)) # 訓練一個堆疊分類器 stacker = stack_models(estimator_list = [dt,rf], meta_model = adaboost) # 動態堆疊多個模型 top7 = compare_models(n_select = 7) stacker = stack_models(estimator_list = top7[1:], meta_model = top7[0]) |
要了解更多模型集成函數,點擊這裡 click here.
和名字一樣,該函數用於推理/預測。以下是使用方法:
# 訓練一個 catboost 模型 catboost = create_model('catboost') # 基於留一(holdout)集預測 (當數據以及傳入) pred_holdout = predict_model(catboost) # 在新數據集上預測 new_data = pd.read_csv('new-data.csv') pred_new = predict_model(catboost, data = new_data |
模型作圖函數可用於評估訓練已完成的機器學習模型的性能評估。示例如下:
# 導入classification 模塊 from pycaret.classification import * # 初始化配置 clf1 = setup(data, target = 'name-of-target') # 訓練一個adaboost 模型 adaboost = create_model('ada') # AUC 作圖 plot_model(adaboost, plot = 'auc') # 決策邊界 plot_model(adaboost, plot = 'boundary') # PR曲線 plot_model(adaboost, plot = 'pr') # 驗證曲線 plot_model(adaboost, plot = 'vc') |
plot_model函數的輸出示例
Click here 點擊這裡了解PyCaret中不同的可視化方法
另外,你可以在notebook的用戶交互界面中使用 evaluate_model 函數來查看圖
PyCaret中的 evaluate_model函數
PyCaret 2.0包括了幾種新的util函數。當你在PyCaret中管理機器學習實驗時可以方便的使用。其中一些如下所示:
# 在當前運行中選擇並完成最優模型 best_model = automl() #返回基於交叉驗證分數的最優模型 # 選擇並完成基於hold_out集上的 'F1' 分數的最優模型 best_model_holdout = automl(optimize = 'F1', use_holdout = True) # 保存模型 save_model(model, 'c:/path-to-directory/model-name') # 加載模型 model = load_model('c:/path-to-directory/model-name') # 以pandas df格式返回分數 dt = create_model('dt') dt_results = pull() #這會以pandas df格式保存 dt 分數網格 # 讀取全局變量 X_train = get_config('X_train') #返回預處理後的 X_train 數據集 seed = get_config('seed') # 從全局變量中返回 seed # 設置全局變量 set_seed(seed, 999) #在當前運行中將全局變量seed 設為 999 # 以csv文件形式得到實驗日誌 logs = get_logs() # 默認為當前運行 # 得到模型日誌 system_logs = get_system_logs() #從當前文件夾讀取logs.log 文件 |
在發布說明 release notes. 中查看PyCaret 2.0中所有的新函數,
PyCaret 2.0以後端API的形式嵌入了機器學習工作流的追蹤組件,並提供UI在你運行機器學習代碼時記錄參數,代碼版本,度量以及輸出文件,以供之後的結果可視化。你可以如下記錄你PyCaret中的實驗:
# 導入classification 模塊 from pycaret.classification import * # 初始化配置 clf1 = setup(data, target = 'name-of-target', log_experiment = True, experiment_name = 'exp-name-here') # 比較模型 best = compare_models() # 在localhost:5000運行mlflow 伺服器(使用notebook時) !mlflow ui |
輸出(在 localhost:5000 )
通過使用這些函數,讓我們創建一個簡單的命令行軟體來使用默認參數來訓練多個模型,對最好的幾個候選模型進行超參數調優,嘗試不同的集成技術並返回/保存最優模型。以下是命令行腳本:
# 導入庫 import pandas as pd import sys # 定義命令行參數 data = sys.argv[1] target = sys.argv[2] # 加載數據 (在使用自己的腳本時替換掉這部分) from pycaret.datasets import get_data input_data = get_data(data) # 初始化配置 from pycaret.classification import * clf1 = setup(data = input_data, target = target, log_experiment = True) # 比較基準模型並選取前5個 top5 = compare_models(n_select = 5) # 對前5個模型參數調優 tuned_top5 = [tune_model(i) for i in top5] # 集成前5個調優後的模型 bagged_tuned_top5 = [ensemble_model(i, method = 'Bagging') for i in tuned_top5] # 混合前5個模型 blender = blend_models(estimator_list = top5) # 堆疊前5個模型 stacker = stack_models(estimator_list = top5[1:], meta_model = top5[0]) # 基於召回率選擇最優模型 best_model = automl(optimize = 'Recall') # 保存模型 save_model(best_model, 'c:/path-to-directory/final-model') |
該腳本動態選擇並保存最佳模型。只需要短短幾行代碼,你就開發好了自己的AutoML軟體,還帶有完整的日誌系統和漂亮榜單的UI界面。
通過這個輕量級工作流自動化Python庫,你可以完成無限可能。
雷鋒字幕組是一個由 AI 愛好者組成的翻譯團隊,匯聚五百多位志願者的力量,分享最新的海外AI資訊,交流關於人工智慧技術領域的行業變革與技術創新的見解。
團隊成員有大數據專家、算法工程師、圖像處理工程師、產品經理、產品運營、IT諮詢人、在校師生;志願者們來自IBM、AVL、Adobe、阿里、百度等知名企業,北大、清華、港大、中科院、南卡羅萊納大學、早稻田大學等海內外高校研究所。
如果,你也是位熱愛分享的AI愛好者。歡迎與雷鋒字幕組一起,學習新知,分享成長。
雷鋒網雷鋒網(公眾號:雷鋒網)
雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。