当前位置:首页>python>Python的PyCaret库

Python的PyCaret库

  • 2026-09-07 22:21:38
Python的PyCaret库

PyCaret 是一个开源的 Python 机器学习库,它用极少的代码封装了从数据预处理到模型部署的完整工作流。你可以把它看作是一个“低代码”的机器学习助手,底层基于 scikit-learn、XGBoost、Optuna 等成熟库,但将其复杂性隐藏在简单、一致的函数接口背后。无论是分类、回归、聚类还是时间序列预测,PyCaret 都提供了专门的模块,让你可以用几行代码完成通常需要数百行才能实现的任务。

下面我将通过大量的代码示例,带你一步步了解 PyCaret 的核心功能。

1. 安装与模块导入

首先安装 PyCaret(建议使用虚拟环境):

pip install pycaret

PyCaret 为不同任务提供了独立模块,例如:

pycaret.classification – 二分类或多分类

pycaret.regression – 回归预测

pycaret.clustering – 聚类分析

pycaret.anomaly_detection – 异常检测

pycaret.time_series – 时间序列预测

pycaret.nlp – 文本分析

导入时需要根据任务选择模块,例如:

from pycaret.classification import *

2. 数据准备

PyCaret 内置了一些示例数据集,也可以直接使用 Pandas DataFrame。以分类任务为例,加载糖尿病数据集:

from pycaret.datasets import get_datadata = get_data('diabetes')data.head()

这个数据集包含 8 个特征和 1 个二分类目标变量 Class variable。

3. 初始化实验:setup()

所有实验都从 setup() 函数开始。它会自动执行缺失值处理、编码、归一化、特征工程等预处理,并建立一个转换管道。你只需要传入数据和目标列名称即可。

# 初始化实验,设置 session_id 保证结果可复现exp = setup(data, target='Class variable', session_id=123)

执行后,PyCaret 会显示一个包含数据形状、特征类型、预处理选项等信息的摘要表格(虽然不是表格,但控制台输出是表格式的)。你可以通过参数来控制每个预处理步骤,例如:

exp = setup(data, target='Class variable',             normalize=True,          # 归一化数值特征            transformation=True,     # 对特征进行幂变换(如 Yeo-Johnson)            remove_multicollinearity=True,  # 移除多重共线性            multicollinearity_threshold=0.9,            session_id=123)

setup() 返回一个实验对象,之后所有操作都会基于该环境。

4. 模型比较:compare_models()

这个函数是所有 PyCaret 用户的“最爱”。它会用交叉验证训练当前模块支持的所有模型,并返回一个性能对比表,帮你快速选出最好的几个算法。

# 比较所有分类模型,按 AUC 排序best_model = compare_models(sort='AUC')

默认情况下,它会使用 10 折交叉验证,并输出 Accuracy、AUC、Recall、Precision、F1 等指标。你可以指定 fold 参数改变折数,或者通过 include 和 exclude 筛选特定模型。

compare_models() 返回训练好的最佳模型(一个 scikit-learn 兼容的估计器),你也可以获取所有模型的对比结果:

results = pull()   # 获取最新结果(DataFrame)print(results)

5. 创建与调优模型

如果不想使用 compare_models() 选出的模型,也可以单独创建某个模型。create_model() 只需传入模型 ID(字符串)即可。

# 创建随机森林模型rf = create_model('rf')# 创建梯度提升模型gbc = create_model('gbc')

PyCaret 内置了模型 ID 的缩写列表,比如 'lr' 逻辑回归、'xgboost' XGBoost、'lightgbm' LightGBM、'dt' 决策树等。你也可以传入自定义的估计器(只要遵循 scikit-learn 接口)。

接着,可以使用 tune_model() 自动调优超参数。PyCaret 会结合网格搜索或随机搜索(默认使用随机搜索,且基于 Optuna)来寻找最佳参数组合。

# 对随机森林进行超参数调优tuned_rf = tune_model(rf, optimize='AUC', n_iter=10)

tune_model() 返回调优后的模型,你也可以通过 choose_better=True 让它在原始模型和调优模型之间自动选择性能更好的一个。

6. 模型集成与混合

PyCaret 还提供了多种集成方法,可以进一步提升模型效果:

# 创建投票分类器(软投票)voted = ensemble_model(best_model, method='Voting')# 创建堆叠分类器stacked = stack_models([rf, gbc], meta_model=create_model('lr'))# 混合(Blending)多个模型blended = blend_models(estimator_list=[rf, gbc, tuned_rf], optimize='AUC')

这些函数同样适用于回归、聚类等任务。

7. 模型评估与可视化

PyCaret 内置了丰富的可视化功能,帮助你诊断模型性能。

plot_model() 可以绘制多种图表,例如:

# 绘制混淆矩阵plot_model(tuned_rf, plot='confusion_matrix')# 绘制 ROC 曲线plot_model(tuned_rf, plot='auc')# 绘制特征重要性plot_model(tuned_rf, plot='feature')

如果你想交互式地探索模型,可以使用 evaluate_model(),它会打开一个交互式仪表盘,允许你动态查看各种图表和指标:

evaluate_model(tuned_rf)

此外,interpret_model() 可以基于 SHAP 值解释模型预测:

interpret_model(tuned_rf)

8. 预测与部署

当模型训练完成后,你可以用它对新数据进行预测。predict_model() 既可以在训练集上做交叉验证预测,也可以用于全新数据。

# 在训练集上进行预测(自动划分)predictions = predict_model(tuned_rf, data=data)# 对新的数据框进行预测new_data = data.sample(5).drop('Class variable', axis=1)new_predictions = predict_model(tuned_rf, data=new_data)

为了将模型保存下来供生产使用,使用 save_model() 和 load_model():

# 保存整个模型管道(包含所有预处理步骤)save_model(tuned_rf, 'my_diabetes_model')# 加载模型loaded_model = load_model('my_diabetes_model')

9. 回归、聚类等其他模块的使用

不同模块的 API 高度一致,切换任务只需改变导入的模块。例如,回归任务:

from pycaret.regression import *reg_data = get_data('housing')exp_reg = setup(reg_data, target='MEDV')best_reg = compare_models()

聚类任务(无监督):

from pycaret.clustering import *cluster_data = get_data('jewellery')exp_clust = setup(cluster_data, normalize=True)kmeans = create_model('kmeans', num_clusters=4)plot_model(kmeans, plot='elbow')   # 绘制肘部图

时间序列模块(pycaret.time_series)略有不同,但同样提供简化的接口:

from pycaret.time_series import *ts_data = get_data('airline')exp_ts = setup(ts_data, fh=12, fold=3)best_ts = compare_models()

10. 高级特性:OOP API 和 MLflow 集成

PyCaret 3.x 提供了面向对象的 API,每个模块都有一个对应的实验类,如 ClassificationExperiment、RegressionExperiment。这种方式更适合需要在多个实验间切换的场景:

from pycaret.classification import ClassificationExperimentexp = ClassificationExperiment()exp.setup(data, target='Class variable', session_id=123)best = exp.compare_models()exp.plot_model(best, plot='auc')

此外,PyCaret 内置了 MLflow 集成。只需在 setup() 中设置 log_experiment=True,所有实验的参数、指标和模型都会自动记录到 MLflow,方便进行实验追踪和对比

11. 自定义模型与流水线

PyCaret 允许你将任何遵循 scikit-learn API 的模型集成到工作流中。例如,创建一个自定义的管道:

from sklearn.pipeline import Pipelinefrom sklearn.decomposition import PCAfrom sklearn.linear_model import LogisticRegressioncustom_pipe = Pipeline([    ('pca', PCA(n_components=5)),    ('lr', LogisticRegression())])# 将自定义模型传入 create_modelmodel = create_model(custom_pipe)

它同样会享受到 tune_model()、plot_model() 等函数带来的便利。

总结

PyCaret 是一个效率极高的机器学习工具库,通过一致的 API 抽象了数据预处理、模型训练、评估和部署的全流程。它的核心优势在于:

低代码:典型的工作流只需要 5~10 行代码。

完整性:覆盖了从数据清洗到模型上线的所有步骤。

可复现性:通过 session_id 和 MLflow 确保实验可复现。

灵活性:既可以使用内置的简易函数,也可以自定义模型和管道。

当然,它并非万能。对于需要深度定制复杂管道或处理海量数据的场景,直接使用 scikit-learn 或 TensorFlow 可能更合适。但对于绝大多数快速原型验证、教学演示和中小规模生产任务,PyCaret 是绝佳的选择。

最新文章

随机文章