Python簡化代碼機器學(xué)習(xí)庫PyCaret 2.0發(fā)布(python簡易代碼)
字幕組雙語原文:Python簡化代碼機器學(xué)習(xí)庫PyCaret 2.0發(fā)布
英語原文:Announcing PyCaret 2.0
翻譯:雷鋒字幕組(Shangru)
我們激動的宣布,PyCaret第二版今天發(fā)布!
PyCaret是一個開源的,低代碼的Python機器學(xué)習(xí)庫,旨在自動化機器學(xué)習(xí)工作流。它是端到端的機器學(xué)習(xí)和模型管理工具。它可以加速機器學(xué)習(xí)的實驗周期,提高你的效率。
和其他開源機器學(xué)習(xí)庫相比,PyCaret是低代碼的。它可以用幾個單詞取代上百行代碼。這大大提高了實驗的速度和效率。在版本說明 release notes中查看PyCaret 2.0的更多細節(jié)。
為什么要用PyCaret
數(shù)據(jù)準備 模型訓(xùn)練 超參數(shù)調(diào)優(yōu)(從左到右)
分析和截圖 模型選擇 實驗日志記錄(從左到右)
PyCaret 2.0 功能
安裝PyCaret 2.0
安裝PyCaret非常簡單,只需要幾分鐘時間。我們強烈建議使用虛擬環(huán)境,以避免和其他庫的潛在沖突。以下示例代碼創(chuàng)建了一個conda環(huán)境,并在該conda環(huán)境下安裝pycaret
# 創(chuàng)建一個 conda 環(huán)境
conda create –name yourenvname python=3.6
# 激活環(huán)境
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 2.0
在PyCaret中,任何機器學(xué)習(xí)實驗的第一步是配置環(huán)境。這需要導(dǎo)入相關(guān)模型并通過傳遞數(shù)據(jù)框(dataframe)和目標變量的名字來初始化配置函數(shù)。示例代碼如下:
# 導(dǎo)入模塊
from pycaret.classification import *
# 初始化配置 (在Notebook環(huán)境內(nèi))
clf1 = setup(data, target = \’target-variable\’)
# 初始化配置 (在 Notebook 環(huán)境外)
clf1 = setup(data, target = \’target-variable\’, html = False)
# 初始化配置 (在 Kaggle / GitHub actions / CI-CD 管道等遠程執(zhí)行)
clf1 = setup(data, target = \’target-variable\’, html = False, silent = True)
輸出示例:
輸出片段
所有的預(yù)處理變換在配置函數(shù)中被調(diào)用。PyCaret提供了超過20種不同的,可在配置函數(shù)內(nèi)調(diào)用的預(yù)處理變換。點擊這里 Click here 了解PyCaret更多的預(yù)處理能力。
樣本和劃分:訓(xùn)練/測試劃分;采樣
數(shù)據(jù)準備:缺失數(shù)據(jù)補全;獨熱編碼;內(nèi)在順序編碼;Cardinal編碼;不平衡修正
縮放和轉(zhuǎn)換:歸一化;轉(zhuǎn)換
特征工程:特征交互;多項式特征;組特征;二元數(shù)值特征
特征選擇:特征重要性;共線性移除;PCA;忽略低方差
無監(jiān)督:創(chuàng)建聚類;異常移除
模型比較
這是所有監(jiān)督學(xué)習(xí)模型任務(wù)中,我們推薦的第一步。該函數(shù)會使用模型的默認超參數(shù)來訓(xùn)練所有模型,并通過交叉檢驗來評估性能。它返回一個已訓(xùn)練的模型的對象類。可使用的評估測度包括:
-
分類:準確度,AUC,召回率,精確率,F(xiàn)1,Kappa,MCC
回歸: MAE, MSE, RMSE, R2, RMSLE, MAPE
這里有幾種使用 compare_models 函數(shù)的方法:
# 導(dǎo)入 classification 模塊
from pycaret.classification import *
# 初始化配置
clf1 = setup(data, target = \’name-of-target\’)
# 返回最優(yōu)模型
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)
輸出示例:
模型創(chuàng)建
模型創(chuàng)建函數(shù)使用默認超參數(shù)訓(xùn)練模型并使用交叉驗證評估模型性能。該函數(shù)是幾乎所有其他PyCaret函數(shù)的底。它返回訓(xùn)練模型對象類。以下是幾種模型使用方法:
# 導(dǎo)入 classification 模塊
from pycaret.classification import *
# 初始化配置
clf1 = setup(data, target = \’name-of-target\’)
# 訓(xùn)練 logistic 回歸模型
lr = create_model(\’lr\’) #lr is the id of the model
# 通過模型庫來查看所有模型
models
# 使用5折交叉驗證訓(xùn)練隨機森林模型
rf = create_model(\’rf\’, fold = 5)
# 不適用交叉驗證訓(xùn)練SVM模型
svm = create_model(\’svm\’, cross_validation = False)
# 訓(xùn)練xgboost模型,其中 max_depth = 10
xgboost = create_model(\’xgboost\’, max_depth = 10)
# 在gpu上訓(xùn)練xgboost模型
xgboost_gpu = create_model(\’xgboost\’, tree_method = \’gpu_hist\’, gpu_id = 0) #0 is gpu-id
# 在多個learning_rate下 訓(xùn)練多個lightgbm 模型
lgbms = [create_model(\’lightgbm\’, learning_rate = i) for i in np.arange(0.1,1,0.1)]
# 訓(xùn)練自定義模型
from gplearn.genetic import SymbolicClassifier
symclf = SymbolicClassifier(generation = 50)
sc = create_model(symclf)
輸出示例:
create_model函數(shù)的輸出示例
要了解更多關(guān)于模型創(chuàng)建函數(shù),點擊這里 click here.
模型調(diào)優(yōu)
模型調(diào)優(yōu)函數(shù)以估計器的形式調(diào)優(yōu)模型超參數(shù)。它在預(yù)設(shè)定的調(diào)優(yōu)網(wǎng)格( 可完全定制化 )上進行隨機網(wǎng)格搜索。以下是幾種函數(shù)使用方法:
# 導(dǎo)入classification 模塊
from pycaret.classification import *
# 初始化配置
clf1 = setup(data, target = \’name-of-target\’)
# 訓(xùn)練一個決策樹模型
dt = create_model(\’dt\’)
# 調(diào)優(yōu)決策樹的一個超參數(shù)
tuned_dt = tune_model(dt)
# 增加n_iter來調(diào)參
tuned_dt = tune_model(dt, n_iter = 50)
# 基于最優(yōu)化AUC調(diào)參
tuned_dt = tune_model(dt, optimize = \’AUC\’) #default is \’Accuracy\’
# 在 custom_grid 上調(diào)參
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)
# 動態(tài)調(diào)優(yōu)多個模型
top3 = compare_models(n_select = 3)
tuned_top3 = [tune_model(i) for i in top3]
要了解更多模型調(diào)優(yōu)函數(shù),點擊這里 click here.
模型集成
有幾種函數(shù)可用于集成底學(xué)習(xí)器。 ensemble_model, blend_models 和stack_models是其中三種。 以下是幾種函數(shù)使用方法:
# 導(dǎo)入classification 模型
from pycaret.classification import *
# 初始化配置
clf1 = setup(data, target = \’name-of-target\’)
# 訓(xùn)練一個決策樹模型
dt = create_model(\’dt\’)
# 基于dt訓(xùn)練一個 Bagging 分類器
bagged_dt = ensemble_model(dt, method = \’Bagging\’)
# 基于dt訓(xùn)練一個帶有100個估計器的adaboost 分類器
boosted_dt = ensemble_model(dt, method = \’Boosting\’, n_estimators = 100)
# 訓(xùn)練一個包括庫中所有模型的投票分類器
blender = blend_models
# 訓(xùn)練一個基于特定模型的投票分類器
dt = create_model(\’dt\’)
rf = create_model(\’rf\’)
adaboost = create_model(\’ada\’)
blender_specific = blend_models(estimator_list = [dt,rf,adaboost], method = \’soft\’)
# 動態(tài)訓(xùn)練一個投票分類器
blender_top5 = blend_models(compare_models(n_select = 5))
# 訓(xùn)練一個堆疊分類器
stacker = stack_models(estimator_list = [dt,rf], meta_model = adaboost)
# 動態(tài)堆疊多個模型
top7 = compare_models(n_select = 7)
stacker = stack_models(estimator_list = top7[1:], meta_model = top7[0])
要了解更多模型集成函數(shù),點擊這里 click here.
模型預(yù)測
和名字一樣,該函數(shù)用于推理/預(yù)測。以下是使用方法:
# 訓(xùn)練一個 catboost 模型
catboost = create_model(\’catboost\’)
# 基于留一(holdout)集預(yù)測 (當數(shù)據(jù)以及傳入)
pred_holdout = predict_model(catboost)
# 在新數(shù)據(jù)集上預(yù)測
new_data = pd.read_csv(\’new-data.csv\’)
pred_new = predict_model(catboost, data = new_data
模型作圖
模型作圖函數(shù)可用于評估訓(xùn)練已完成的機器學(xué)習(xí)模型的性能評估。示例如下:
# 導(dǎo)入classification 模塊
from pycaret.classification import *
# 初始化配置
clf1 = setup(data, target = \’name-of-target\’)
# 訓(xùn)練一個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函數(shù)的輸出示例
Click here點擊這里了解PyCaret中不同的可視化方法
另外,你可以在notebook的用戶交互界面中使用 evaluate_model 函數(shù)來查看圖
PyCaret中的 evaluate_model函數(shù)
Util函數(shù)
PyCaret 2.0包括了幾種新的util函數(shù)。當你在PyCaret中管理機器學(xué)習(xí)實驗時可以方便的使用。其中一些如下所示:
# 在當前運行中選擇并完成最優(yōu)模型
best_model = automl #返回基于交叉驗證分數(shù)的最優(yōu)模型
# 選擇并完成基于hold_out集上的 \’F1\’ 分數(shù)的最優(yōu)模型
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格式返回分數(shù)
dt = create_model(\’dt\’)
dt_results = pull #這會以pandas df格式保存 dt 分數(shù)網(wǎng)格
# 讀取全局變量
X_train = get_config(\’X_train\’) #返回預(yù)處理后的 X_train 數(shù)據(jù)集
seed = get_config(\’seed\’) # 從全局變量中返回 seed
# 設(shè)置全局變量
set_seed(seed, 999) #在當前運行中將全局變量seed 設(shè)為 999
# 以csv文件形式得到實驗日志
logs = get_logs # 默認為當前運行
# 得到模型日志
system_logs = get_system_logs #從當前文件夾讀取logs.log 文件
在發(fā)布說明 release notes. 中查看PyCaret 2.0中所有的新函數(shù),
Experiment日志
PyCaret 2.0以后端API的形式嵌入了機器學(xué)習(xí)工作流的追蹤組件,并提供UI在你運行機器學(xué)習(xí)代碼時記錄參數(shù),代碼版本,度量以及輸出文件,以供之后的結(jié)果可視化。你可以如下記錄你PyCaret中的實驗:
# 導(dǎo)入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 服務(wù)器(使用notebook時)
!mlflow ui
輸出(在 localhost:5000 )
整合——創(chuàng)建你自己的AutoML軟件
通過使用這些函數(shù),讓我們創(chuàng)建一個簡單的命令行軟件來使用默認參數(shù)來訓(xùn)練多個模型,對最好的幾個候選模型進行超參數(shù)調(diào)優(yōu),嘗試不同的集成技術(shù)并返回/保存最優(yōu)模型。以下是命令行腳本:
# 導(dǎo)入庫
import pandas as pd
import sys
# 定義命令行參數(shù)
data = sys.argv[1]
target = sys.argv[2]
# 加載數(shù)據(jù) (在使用自己的腳本時替換掉這部分)
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個模型參數(shù)調(diào)優(yōu)
tuned_top5 = [tune_model(i) for i in top5]
# 集成前5個調(diào)優(yōu)后的模型
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])
# 基于召回率選擇最優(yōu)模型
best_model = automl(optimize = \’Recall\’)
# 保存模型
save_model(best_model, \’c:/path-to-directory/final-model\’)
該腳本動態(tài)選擇并保存最佳模型。只需要短短幾行代碼,你就開發(fā)好了自己的AutoML軟件,還帶有完整的日志系統(tǒng)和漂亮榜單的UI界面。
通過這個輕量級工作流自動化Python庫,你可以完成無限可能。
雷鋒字幕組是一個由 AI 愛好者組成的翻譯團隊,匯聚五百多位志愿者的力量,分享最新的海外AI資訊,交流關(guān)于人工智能技術(shù)領(lǐng)域的行業(yè)變革與技術(shù)創(chuàng)新的見解。
團隊成員有大數(shù)據(jù)專家、算法工程師、圖像處理工程師、產(chǎn)品經(jīng)理、產(chǎn)品運營、IT咨詢?nèi)?、在校師生;志愿者們來自IBM、AVL、Adobe、阿里、百度等知名企業(yè),北大、清華、港大、中科院、南卡羅萊納大學(xué)、早稻田大學(xué)等海內(nèi)外高校研究所。
如果,你也是位熱愛分享的AI愛好者。歡迎與雷鋒字幕組一起,學(xué)習(xí)新知,分享成長。
雷鋒網(wǎng)雷鋒網(wǎng)