低代码机器学习库--Pycaret

目录

PyCaret简介

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.模型保存

六、模型部署

七、总结


PyCaret简介

PyCaret是Python中的一个开源、低代码机器学习库,旨在减少从数据处理到模型部署的周期时间。PyCaret库只需几行代码就可以完成从准备数据到部署模型,老少皆宜(PyCaret官网地址),支持的功能有数据处理,模型训练,参数搜索,模型可解释性,模型选择,实验日志查询。

PyCaret安装

为了避免与其他软件包的潜在冲突,强烈建议使用虚拟环境。使用隔离环境可以独立于任何先前安装的 Python 包安装特定版本的 pycaret 及其依赖项。

#1.创建新的虚拟环境 #为了直接省事我这里直接复制默认的base环境到新的环境"newpy37"中,这样原来该有库都有了。 
conda create --name newpy37--clone base 
#或者也可以使用以下命令 
conda create --name newpy37 python=3.7 #新环境会创建后,路径在 D:\Anaconda3\envs\newpy37下,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个算法函数供不同场景需求调用:

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文档

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyCaret 是一个开源的机器学习,它可以帮助你快速、简单地实现机器学习工作流程,其中包括数据预处理、建模、评估和可视化等。 在 PyCaret 中,你可以使用 `plot_model` 函数来绘制模型的各种图表。以下是几个常见的示例: 1. 绘制特征重要性图表 ```python from pycaret.datasets import get_data from pycaret.classification import * data = get_data('diabetes') clf = setup(data, target='Class variable') rf = create_model('rf') plot_model(rf, plot='feature') ``` 这将绘制随机森林模型的特征重要性图表。 2. 绘制学习曲线 ```python from pycaret.datasets import get_data from pycaret.classification import * data = get_data('diabetes') clf = setup(data, target='Class variable') rf = create_model('rf') plot_model(rf, plot='learning') ``` 这将绘制随机森林模型的学习曲线图表。 3. 绘制误差矩阵 ```python from pycaret.datasets import get_data from pycaret.classification import * data = get_data('diabetes') clf = setup(data, target='Class variable') rf = create_model('rf') plot_model(rf, plot='confusion_matrix') ``` 这将绘制随机森林模型的误差矩阵图表。 4. 绘制ROC曲线 ```python from pycaret.datasets import get_data from pycaret.classification import * data = get_data('diabetes') clf = setup(data, target='Class variable') rf = create_model('rf') plot_model(rf, plot='auc') ``` 这将绘制随机森林模型的ROC曲线图表。 除了以上示例外,PyCaret 还支持绘制其他类型的图表,如分类报告、精度-召回率曲线、决策树等。你可以根据需要选择适当的函数进行绘制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值