简介
在本实验中,我们将在葡萄酒评论数据集上比较不同类别编码器的性能。我们将使用目标列“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 使用的分箱是有意义的,并能带来良好的结果。