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