
使用 PyCaret 创建强大的集成模型
图片来源:Editor | Canva
机器学习正在改变我们解决问题的方式。然而,没有一个模型是完美的。模型可能会出现过拟合、欠拟合或偏差等问题,从而降低预测准确性。集成学习通过结合多个模型的预测来解决这个问题,利用每个模型的优点同时减少缺点。这带来了更准确、更可靠的预测。
PyCaret 通过用户友好的界面简化了集成模型的构建,处理数据预处理、模型创建、调优和评估。PyCaret 允许轻松创建、比较和优化集成模型,使机器学习几乎所有人都能使用。
在本文中,我们将探讨如何使用 PyCaret 创建集成模型。
为什么要使用集成模型?
如前所述,机器学习模型的一些问题是它们可能过拟合、欠拟合或做出有偏差的预测。集成模型通过结合多个模型来解决这些问题。集成的好处包括:
- 提高准确性:结合多个模型的预测通常比使用单个模型获得更好的结果
- 减少过拟合:集成模型可以通过减少单个模型的离群预测的影响来更好地泛化
- 增加鲁棒性:聚合不同的模型使预测更稳定、更可靠
集成技术的类型
集成技术结合了多个模型,以克服与单个模型相关的潜在缺点。主要的集成技术有袋装法(bagging)、提升法(boosting)、堆叠法(stacking)和投票与平均法(voting and averaging)。
袋装法(Bootstrap Aggregating)
袋装法通过在不同的数据子集上训练多个模型来降低方差。这些子集是通过有放回的随机抽样创建的。每个模型都独立训练,预测通过平均(用于回归)或投票(用于分类)结合。袋装法有助于减少过拟合并使预测更稳定。随机森林是一种应用于决策树的袋装法。
提升
提升法通过按顺序训练模型来减少偏差和方差,每个新模型都从前一个模型的错误中学习。被错误分类的点会获得更高的权重,以集中学习。提升法将弱模型(如浅层决策树)组合成一个强模型。提升法对于复杂数据集效果很好,但需要仔细调整。流行的算法包括 AdaBoost、XGBoost 和 LightGBM。
堆叠
堆叠法结合了不同的模型以利用它们的优势,之后在基础模型的预测上训练一个元模型以进行最终预测。元模型学习如何结合基础模型的预测以获得更好的准确性。堆叠法处理不同的模式,但计算密集,需要验证以避免过拟合。
投票与平均法
投票与平均法在没有元模型的情况下结合多个模型的预测。在投票法(用于分类)中,预测通过多数规则(硬投票)或平均概率(软投票)结合。在平均法(用于回归)中,模型预测被平均。这些方法易于实现,并且在基础模型强大且多样时效果很好,通常用作基线集成技术。
安装 PyCaret
首先使用 pip 安装 PyCaret
1 |
pip install pycaret |
准备数据
对于本教程,我们将使用流行的糖尿病数据集进行分类。
1 2 3 4 5 6 7 8 9 |
从 pycaret.数据集 导入 get_data 从 pycaret.分类 导入 * # 加载数据集 数据 = get_data('diabetes') # 将数据集拆分为训练集和测试集 from sklearn.model_selection import train_test_split train, test = train_test_split(data, test_size=0.2, random_state=123) |
设置环境
setup() 函数通过执行数据预处理任务(如处理缺失值、缩放和编码)来初始化 PyCaret 环境。
1 2 |
# 初始化 PyCaret 环境 exp = setup(data=train, target='Class variable', session_id=123) |
一些重要的 setup 参数包括
- data:训练数据集
- target:目标列的名称
- session_id:设置随机种子以实现可复现性
比较基础模型
PyCaret 允许您比较多个基础模型并选择用于集成建模的最佳候选模型。
1 2 |
# 比较模型并根据性能进行排名 best_models = compare_models(n_select=3) |
以下是正在发生的事情:
- compare_models() 评估所有可用模型并根据默认指标(如准确性或 AUC)对其进行排名
- n_select=3 选择前 3 个模型以供进一步使用
创建袋装法和提升法模型
您可以使用 PyCaret 的 create_model() 函数创建袋装法集成
1 2 |
# 创建随机森林模型 rf_model = create_model('rf') |
提升法模型可以以类似的方式创建
1 2 |
# 创建梯度提升模型 gb_model = create_model('gbc') |
创建堆叠集成
堆叠集成使用元模型结合多个模型的预测。它们的创建方式如下所示
1 2 |
# 使用前 3 个模型创建堆叠集成 stacked_model = stack_models(best_models) |
在这里,stack_models() 使用元模型(分类的默认元模型是逻辑回归)结合 best_models 中的模型预测。
创建投票集成
投票法通过多数投票(分类)或平均(回归)来聚合预测。
1 2 |
# 使用前 3 个模型创建投票集成 voting_model = blend_models(best_models) |
在上面,blend_models() 自动将所选模型的预测组合成一个单一的集成。
评估模型
您可以使用 evaluate_model() 函数评估集成模型。它提供了各种可视化,如 ROC-AUC、精确率-召回率和混淆矩阵。在这里,我们评估堆叠模型并查看混淆矩阵。
1 2 |
# 评估每个模型 evaluate_model(stacked_model) |
集成建模的最佳实践
为了获得高质量结果的最佳机会,在创建集成模型时请记住以下最佳实践。
- 确保模型多样性:使用不同的模型类型并改变超参数以增加多样性
- 限制模型复杂度:避免过于复杂的模型以防止过拟合并使用正则化技术
- 监控集成大小:避免不必要的模型并确保添加更多模型可以提高性能
- 处理类别不平衡:使用过采样或加权损失函数等技术解决类别不平衡问题
- 集成模型融合:结合不同的集成方法(例如,堆叠和袋装)以获得更好的结果
结论
集成模型通过结合多个模型来提高机器学习性能,而 PyCaret 通过易于使用的函数简化了这一过程。您可以使用该库轻松创建袋装法、提升法、堆叠法和投票集成,该库还支持超参数调优以获得更好的结果。评估您的模型以选择最佳模型,然后保存您的集成模型以供将来使用或部署。遵循最佳实践时,集成学习与 PyCaret 相结合可以帮助您快速高效地构建强大的模型。
感谢您撰写了一篇关于实用主题的优秀文章。Github 上有人猜测 Pycaret 不再积极维护。您对此有任何了解吗?
截至 2024 年 4 月 28 日,PyCaret 发布了 3.3.2 版本,解决了安装问题并改进了 AUC 指标。([github.com](https://github.com/pycaret/pycaret/releases?utm_source=chatgpt.com)) 然而,最近的讨论表明该项目可能不再积极维护。在 2024 年 11 月的 GitHub 讨论中,一位用户提到 PyCaret 团队由于个人和工作相关变化而放弃了该项目。([github.com](https://github.com/autogluon/autogluon/discussions/4605?utm_source=chatgpt.com)) 因此,一些用户正在转向 AutoGluon 等替代库,该库提供类似的低代码功能并积极维护。
鉴于这些发展,PyCaret 目前似乎没有得到积极维护。如果您正在考虑替代方案,AutoGluon 可能是一个值得探索的选择。
非常好的技术