比较不同的类别编码器

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将在葡萄酒评论数据集上比较不同类别编码器的性能。我们将使用目标列“points”作为要预测的目标变量。我们将比较以下编码器:目标编码器(TargetEncoder)、独热编码器(OneHotEncoder)、序数编码器(OrdinalEncoder)以及删除类别。我们还将了解如何在“HistGradientBoostingRegressor”中使用原生类别特征支持。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”(Notebook)标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

从 OpenML 加载数据

首先,我们使用 scikit-learn.datasets 模块中的 fetch_openml 函数加载葡萄酒评论数据集。我们将仅使用数据中的一部分数值和类别特征。我们将在数据中使用以下数值和类别特征子集:numerical_features = ["price"]categorical_features = ["country", "province", "region_1", "region_2", "variety", "winery"]

使用不同编码器训练和评估管道

在本节中,我们将使用具有不同编码策略的 HistGradientBoostingRegressor 评估管道。我们将使用交叉验证评估模型并记录结果。

原生类别特征支持

在本节中,我们构建并评估一个管道,该管道在 HistGradientBoostingRegressor 中使用原生类别特征支持,HistGradientBoostingRegressor 仅支持多达 255 个唯一类别。我们将类别特征分为低基数特征和高基数特征。高基数特征将进行目标编码,低基数特征将在梯度提升中使用原生类别特征。

绘制结果

在本节中,我们通过绘制测试分数和训练分数来展示结果。

总结

在本实验中,我们比较了不同类别编码器在葡萄酒评论数据集上的性能。我们还研究了如何在 HistGradientBoostingRegressor 中使用原生类别特征支持。我们发现删除类别表现最差,而目标编码器表现最佳。序数编码给特征强加了一个任意顺序,然后 HistGradientBoostingRegressor 将这些特征视为数值。独热编码方案可能会使管道过拟合,因为随着特征数量因偶然与目标相关的稀有类别出现而激增。当使用目标编码器时,会发生相同的分箱操作,但由于编码值是按与目标变量的边际关联进行统计排序的,所以 HistGradientBoostingRegressor 使用的分箱是有意义的,并能带来良好的结果。