字幕组双语原文:Python简化代码机器学习库PyCaret 2.0发布
翻译:雷锋字幕组(Shangru)
我们激动的宣布,PyCaret第二版今天发布!
PyCaret是一个开源的,低代码的Python机器学习库,旨在自动化机器学习工作流。它是端到端的机器学习和模型管理工具。它可以加速机器学习的实验周期,提高你的效率。
和其他开源机器学习库相比,PyCaret是低代码的。它可以用几个单词取代上百行代码。这大大提高了实验的速度和效率。在版本说明 release notes 中查看PyCaret 2.0的更多细节。
为什么要用PyCaret
数据准备 模型训练 超参数调优(从左到右)
分析和截图 模型选择 实验日志记录(从左到右)
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 2.0
在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函数
Util函数
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中所有的新函数,
Experiment日志
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 )
整合——创建你自己的AutoML软件
通过使用这些函数,让我们创建一个简单的命令行软件来使用默认参数来训练多个模型,对最好的几个候选模型进行超参数调优,尝试不同的集成技术并返回/保存最优模型。以下是命令行脚本:
# 导入库 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爱好者。欢迎与雷锋字幕组一起,学习新知,分享成长。
雷锋网(公众号:雷锋网)雷锋网
雷锋网版权文章,未经授权禁止转载。详情见转载须知。