PyCaret 是一个开源的 Python 机器学习库,它用极少的代码封装了从数据预处理到模型部署的完整工作流。你可以把它看作是一个“低代码”的机器学习助手,底层基于 scikit-learn、XGBoost、Optuna 等成熟库,但将其复杂性隐藏在简单、一致的函数接口背后。无论是分类、回归、聚类还是时间序列预测,PyCaret 都提供了专门的模块,让你可以用几行代码完成通常需要数百行才能实现的任务。
下面我将通过大量的代码示例,带你一步步了解 PyCaret 的核心功能。
1. 安装与模块导入
首先安装 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(),它会打开一个交互式仪表盘,允许你动态查看各种图表和指标:
此外,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 是绝佳的选择。