PyCaret2.3简介
PyCaret安装
PyCaret功能模块
一、数据初始化
1.设置数据集、标注目标值
2.训练集/测试集划分
3.数据预处理
4.类别型特征值处理
5.编码转换
6.数据标准化
7.数据转换
8.特征衍生
9.特征选择
10.样本平衡处理
二、模型训练
1.比较模型
2.创建模型
3.模型调参
4.模型融合
三、模型可视化分析
1.性能分析(plot_model)
2.解释性分析(interpret_model)
3.模型校准(calibrate_model)
4.阈值优化 optimize_threshold
四、模型预测
五、模型保存/加载
1.最终模型
2.模型保存
六、模型部署
七、总结
PyCaret2.3简介PyCaret是Python中的一个开源、低代码机器学习库 旨在减少从数据处理到模型部署的周期时间。PyCaret库只需几行代码就可以完成从准备数据到部署模型 老少皆宜(PyCaret官网地址) 目前PyCaret版本更新到2.3 支持的功能有数据处理 模型训练 参数搜索 模型可解释性 模型选择 实验日志查询。
PyCaret安装为了避免与其他软件包的潜在冲突 强烈建议使用虚拟环境。使用隔离环境可以独立于任何先前安装的 Python 包安装特定版本的 pycaret 及其依赖项。
#1.创建新的虚拟环境 #为了直接省事我这里直接复制默认的base环境到新的环境 newpy37 中 这样原来该有库都有了。 conda create --name newpy37--clone base #或者也可以使用以下命令 conda create --name newpy37 python 3.7 #新环境会创建后 路径在 D:Anaconda3envsnewpy37下 D:Anaconda3为我的Anaconda3安装路径 #2.激活新的虚拟环境 conda activate newpy37 #3.安装pycaret包 #PyCaret 的默认安装是 pycaret 的精简版 我这里直接安装完整版 pip install pycaret[full] #4.创建连接 conda 新环境new_env 的 notebook 内核 python -m ipykernel install --user --name newpy37 --display-name new-kernel
打开jupyter lab 后 可以在右上角上选择刚创建的“new-kernel”环境 如
PyCaret功能模块加载数据 可使用pandas读取
数据处理 setup 函数可以进行特征预处理 特征衍生 特征选择 自动创建pipeline等
创建模型 近70个机器学习算法 使用create_model 函数创建 支持模型融合
模型分析 提供多种模型可视化分析 通过plot_model函数实现
模型验证/预测 通过predict_model 函数不仅可以对hold-out数据集进行预测 还可以对未知数据集预测
最终模型 finalizemodel 函数训练和测试数据合并重新训练模型 savemodel和load_model函数分别是保存和加载模型及pipeline
模型部署 deploy_model 此函数在云上部署转换管道和经过训练的模型。
一、数据初始化PyCaret通过setup()函数可将原始数据进行一站式数据采样与划分、数据预处理、转换、特征工程等操作 它会根据setup函数中定义的参数创建转换管道 transformation pipeline 。它会自动编排管道 pipeline 中的所有依赖项 因此您不必手动管理对测试数据集或未知的数据集进行转换的顺序执行。PyCaret的管道可以轻松地在各种环境之间转移 以实现大规模运行或轻松部署到生产环境中。
get_config函数查看的全局变量
set_config函数更改的全局变量
不同模块中的setup()函数的参数有一定差异 除了分类和回归setup()函数参数相差无异外 聚类、异常检测、NLP和关联规则挖掘模块的参数相对更少一些 而这里以分类中的setup()展开讨论 主要参数如下。
1.设置数据集、标注目标值data: pandas.Dataframe
target: str
2.训练集/测试集划分train_size: float, default 0.7 #用于训练和验证的数据集的比例。应介于0.0和1.0之间。
test_data:pandas.Dataframe, default None # 如果手动传入测试数据集 则train_size的参数失效
3.数据预处理是否进行数据处理 默认true
preprocess: bool, default True
指定特征数据类型
categorical_features: list of str, default None
numeric_features: list of str, default None
date_features: list of str, default None
ignore_features: list of str, default None #删除指定特征
缺失值处理
当imputation_type: str, default simple 时
categorical_imputation: str, default constant #默认填充“not_available”值 或设为 mode ,填充众数
numeric_imputation: str, default mean # 默认填充平均值 其他参数有 median or zero .
当imputation_type: str, default iterative 时:
iterative_imputation_iters: int, default 5
categorical_iterative_imputer: str, default lightgbm
numeric_iterative_imputer: str, default lightgbm
4.类别型特征值处理处理特征中未知分类
handle_unknown_categorical: bool, default True
unknown_categorical_method: str, default least_frequent # 其他参数有 most_frequent
分类特征某个类别分布低于某个阈值 合并该稀有类别
combine_rare_levels: bool, default False
rare_level_threshold: float, default 0.1
5.编码转换类别型变量默认都会进行one-hot独热编码
序列编码
ordinal_features: dict, default None #将分类特征编码为序号 传入字典
基数编码
high_cardinality_features: string, default None
使用频率分布作为原始值 可选参数 clustering 使用聚类标签替换原始值
high_cardinality_method: string, default frequency
6.数据标准化normalize: bool, default False #默认不启动标准化
normalize_method: str, default zscore # 其他参数有[minmax,maxabs,robust]
7.数据转换transformation: bool, default False #默认不启动转换
transformation_method: str, default yeo-johnson # 其他参数有 quantile
数值特征分群 底层用KMeans聚类后 特征的原始值将替换为簇标签。
bin_numeric_features: list of str, default None
8.特征衍生多项式特征
polynomial_features: bool, default False
polynomial_degree: int, default 2 #默认是多元二次函数
三角函数特征
trigonometry_features: bool, default False
polynomial_threshold: float, default 0.1
特征交互
feature_interaction: bool, default False #可能无法在高维特性空间中使用 特征组合方法 a * b
feature_ratio: bool, default False #可能无法在高维特性空间中使用 特征组合方法 a / b
interaction_threshold: bool, default 0.01 #与polynomial_threshold类似 通常将通过组合方法新创建特征压缩成稀疏矩阵 根据随机森林 Adaboost的特征重要性和线性相关性低于设置的阈值将保留在数据集中 其余特征被删除
聚合特征
#当数据集中包含以某种方式批次相关的特征时 比如 特征以固定的时间间隔记录 就可以从现有特征中创建一些统计#指标 比如均值 中位数 方差和标准差
group_features: list or list of list, default None
group_names: list, default None #长度必须与group_features的长度一致
9.特征选择主成分分析
pca: bool, default False
pca_method: str, default linear #其他参数【kernel incremental】
pca_components: int or float, default None # 要保留的组件数
低方差 异常值删除
ignore_low_variance: bool, default False
remove_outliers: bool, default False
outliers_threshold: float, default 0.05
消除多重共线性
remove_multicollinearity: bool, default False
multicollinearity_threshold: float, default 0.9
随机删除相关性为1的特征
remove_perfect_collinearity: bool, default True
生成聚类标签 然后标签作为新的特征
create_clusters: bool, default False
cluster_iter: int, default 20 #创建群集的迭代次数
特征重要性选择
feature_selection: bool, default False
feature_selection_threshold: float, default 0.8 较大的值将导致较高的特征空间
feature_selection_method: str, default classic # 默认使用经典的树模型方法 其他参数 boruta
10.样本平衡处理fix_imbalance: bool, default False #默认
fix_imbalance_method: obj, default None 默认使用 SMOTE 方法
二、模型训练pycaret包含6类共69个算法函数供不同场景需求调用
Classification 分类
Regression 回归
Clustering 聚类
Anomaly Detection 异常检测
Natural Language Processing 自然语言处理
Association Rule Mining 关联规则挖掘
1.比较模型通常在建模当中 我们并不知道哪个算法表现会比较好 这就需要跑一遍多个算法作比较。pycaret库中的compare_models函数能堪此重任 此函数使用默认超参数训练模型库中的所有模型 并使用交叉验证(默认10折)评估性能指标。它返回经过训练的模型对象。使用的评估指标包括
Classification: Accuracy, AUC, Recall, Precision, F1, Kappa, MCC
Regression: MAE, MSE, RMSE, R2, RMSLE, MAPE
此函数的输出是一个表格 显示所有模型在k折交叉中的平均得分。某些模型由于运行时间较长而无法进行比较。如要全部比较 可以将turbo参数设置为False。此函数仅在分类和回归模块中可用。常用参数如下
include: default None #需要对比的模型 可传入上述的算法ID列表 默认全部模型比较
exclude: list of str, default None #需要排除的算法模型
fold int default None #默认是setup函数中设置的fold值
sort: str, default Accuracy ,函数输出指标排序 分类默认 Accuracy 回归默认‘R2’
n_select int, default 1 #要返回的最好模型个数 根据sort指标排序 再选取排在最前面的模型数
# importing dataset from pycaret.datasets import get_data diabetes get_data( diabetes ) clf1 setup(data credit_data, target default ,fold 5,session_id 123) # 选取AUC最优5个模型 best_top5 compare_models(sort AUC ,n_select 5)
AUC值为0.0000 表示该模型不支持预测概率输出
2.创建模型create_model函数可以根据模型库的ID创建模型 该函数使用交叉验证(默认是setup函数设置的fold)来训练和评估给定模型的性能 输出是一个分数表 其中包含按倍数计算的CV分数。可以使用get_Metrics函数访问CV期间评估的指标。可以使用add_metric和remove_metric函数添加或删除自定义度量。
params { max_depth : 2, n_estimators :800,
learning_rate :0.05, subsample :0.8, colsample_bytree :0.8}
lgb create_model( lightgbm ,**params) #默认是setup函数设置的fold
3.模型调参
tune_model函数用于调整给定模型的超参数。该函数的输出是一个分数表 其中包含基于优化参数的最佳选择模型的CV分数。常用参数设置如下
estimator: scikit-learn compatible object #需要调参的模型 fold: int or scikit-learn compatible CV generator, default None # 交叉验证折数 #评估指标 custom_scorer: object, default None #可以通过自定义评分策略来调整模型的超参数。它必须使用sklearn.make_scorer创建。 optimize: str, default Accuracy # 调参评估指标 #自定义设置参数搜索空间。包含要迭代的参数名称和值的字典。 custom_grid: dictionary, default None #可调用4个参数搜索库[ scikit-learn , scikit-optimize , tune-sklearn , optuna ] search_library: str, default scikit-learn #搜索算法取决于搜索库参数。某些搜索算法需要安装额外的库。如果没有 将使用特定于搜索库的默认算法。 search_algorithm: str, default None #不同搜索库中对应的算法 scikit-learn 可能值: random : random grid search (default) grid : grid search scikit-optimize 可能值: bayesian : Bayesian search (default) tune-sklearn 可能值: random : random grid search (default) grid : grid search bayesian : pip install scikit-optimize hyperopt : pip install hyperopt optuna : pip install optuna bohb : pip install hpbandster ConfigSpace optuna 可能值: random : randomized search tpe : Tree-structured Parzen Estimator search (default)
lgb_tune tune_model(lgb,optimize AUC , search_library scikit-optimize ,search_algorithm bayesian )4.模型融合
pycaret包中blend_models(),stack_models()可以进行模型融合
三、模型可视化分析 1.性能分析(plot_model)分析经过训练的机器学习模型的性能是任何机器学习工作流中不可或缺的一步。plot_model函数用于分析经过训练的模型在测试集上的性能 有丰富的可视化图表。
不支持“预测概率”属性的模型不能用于“AUC”和“校准”图。
当目标为多类时 “校准”、“阈值”、“歧管”和“rfe”图不可用。
当训练模型对象的“max_features”参数不等于训练集中的样本数时 “rfe”图不可用。
常用参数
use_train_data True 时可以画出训练集相关指标 默认时分析测试集表现
plot: str, default ‘auc’
‘auc’ - Area Under the Curve
‘threshold’ - Discrimination Threshold
‘pr’ - Precision Recall Curve
‘confusion_matrix’ - Confusion Matrix
‘error’ - Class Prediction Error
‘class_report’ - Classification Report
‘boundary’ - Decision Boundary
‘rfe’ - Recursive Feature Selection
‘learning’ - Learning Curve
‘manifold’ - Manifold Learning
‘calibration’ - Calibration Curve
‘vc’ - Validation Curve
‘dimension’ - Dimension Learning
‘feature’ - Feature importance
‘feature_all’ - Feature importance (All)
‘parameter’ - Model Hyperparameter
‘lift’ - Lift Curve
‘gain’ - Gain Chart
‘tree’ - Decision Tree
‘ks’ - KS Statistic Plot
2.解释性分析(interpret_model)模型可解释性通过分析模型真正认为重要的内容来帮助调试模型。interpret_model函数中的大多数绘图是基于SHAP SHapley加法解释 实现的。此函数仅在pycaret.classification和pycaret.regression模块中可用。
有关这方面的更多信息 请参阅Welcome to the SHAP documentation — SHAP latest documentation
绘图类别属性 plot str, default ‘summary’
‘summary’ - Summary Plot using SHAP
‘correlation’ - Dependence Plot using SHAP
‘reason’ - Force Plot using SHAP
‘pdp’ - Partial Dependence Plot
‘msa’ - Morris Sensitivity Analysis
‘pfi’ - Permutation Feature importance
interpret_model(xgboost)
interpret_model(xgboost, plot correlation )
interpret_model(xgboost, plot reason , observation 10)3.模型校准(calibrate_model)
通常在进行分类建模时 不仅要预测类标签 还要获得预测的概率。有的分类器 例如SVM 只能直接打上类别标签没法给出置信度。另一方面 在某些场景中 我们希望得到真实的概率。分数校准主要目的:
修正实际概率和开发样本中期望概率之间的偏差。
保证预测概率与真实概率之间的一致性 拟合度
calibrate_model函数使用等isotonic or logistic regression算法校准给定模型的概率。此函数的输出是一个分数表 其中包含按交叉折数(默认setup函数fold)计算的CV分数。
calibrated_dt calibrate_model(dt)4.阈值优化 optimize_threshold
在分类问题中 false positives 的代价几乎不等于 false negatives 的代价。因此 如果您正在优化 Type 1 和 Type 2 错误具有不同影响的业务问题 则可以针对概率阈值优化分类器 以便通过分别定义TP、TN、FP和FN的代价来优化自定义损失函数。
optimize_threshold函数返回一个交互图 其中损失函数 y轴 表示为x轴上不同概率阈值的函数。然后显示一条垂直线来表示该特定分类器的概率阈值的最佳值。然后 使用优化阈值优化的概率阈值可用于预测模型函数中 以使用自定义概率阈值生成标签。一般情况下 所有的分类器都被训练成50%的预测阳性类。
optimize_threshold(xgboost, true_negative 1500, false_negative -5000)四、模型预测
到目前为止 我们看到的结果仅基于训练数据集的k倍交叉验证 默认为70 。为了查看模型在test / hold-out上的预测和性能 使用了predict_model函数 该函数使用经过训练的模型预测标签和分数 预测类别的概率 。
主要参数
estimator #训练好的模型
data: pandas.Dataframe 默认预测setup函数留样数据集的标签和分数 也可以传入时间外样本预测(OOT)
probability_threshold: float, default None#将预测概率转换为类别标签的阈值。除非在此参数中明确定义 否则所有分类器的默认值均为0.5。
raw_score: bool, default False #设置为True时 将返回所有标签的分数 我一般设置为True
raw_score False,返回Score列的值表示左侧label列值对应的概率值
raw_score True 将会返回每个标签的预测概率 如以下是二分类器 score_0表示预测为0的概率 score_1表示预测为1的概率
五、模型保存/加载 1.最终模型在最初使用setup进行初始化时 默认情况下 数据集分被为两部分 一部分是70%训练集 一部分是30%测试集 finalize_model函数功能主要是将30%测试集与70%训练集合并后放到已经创建好的模型上再次训练 简单来讲就是扩充样本量再走一遍Pipeline过程。
此函数仅在pycaret.classification和pycaret.regression模块中可用
2.模型保存save_model函数获取一个经过训练的模型对象 并将整个转换管道和经过训练的模型对象保存为可转移的二进制pickle文件 以供以后使用。
load_model函数用于加载以前保存的管道。
六、模型部署模型确定后 一般都是现将模型保存为xxx.pmml或xxx.pkl格式文件后再上传到本地服务器部署 pycaret还提供了一种在云服务商上部署模型 此处有待研究。
七、总结Pycaret只需几行代码就可以完成模型建立 且有丰富的可视化模型解释分析图表 简单易用 门槛很低 非常适合新手上路使用。虽然setup函数的数据处理功能很全面 但是在实际应用中 我还是建议自己先把数据处理干净 规范后 再要配合Pycaret使用。
知乎 地豆
参考链接
pycaret官网
pycaret文档



