分类特征:标签编码有什么问题?

分类标签编码的问题:为何如此重要?

为什么我们不能随意编码分类特征

云。图片作者:XXX

众所周知,许多机器学习模型无法原生地处理分类特征。虽然有一些例外,但通常由实践者决定每个分类特征的数值表示。有很多种方法可以完成这个过程,但是一个很少推荐的策略是使用标签编码。

标签编码将每个分类值替换为一个任意的数字。例如,如果我们有一个包含字母的特征,标签编码可能会将字母“A”赋值为0,字母“B”赋值为1,并按此模式继续,直到“Z”被赋值为25。在这个过程之后,技术上来说,任何算法都应该能够处理编码后的特征。

但是这样做有什么问题呢?难道复杂的机器学习模型不能处理这种类型的编码吗?为什么会有像Catboost和其他编码策略这样的库来处理高基数的分类特征呢?

本文将通过两个示例来说明标签编码对机器学习模型可能存在的问题。这些示例将帮助我们理解为什么会有这么多替代标签编码的方法,并加深我们对数据复杂性和模型性能之间关系的理解。

直观示例

获得对机器学习概念的直观理解的最佳方法之一是理解它在低维空间中的工作原理,并尝试将结果推广到更高维度。这种心理推广并不总是与现实一致,但对于我们的目的来说,我们只需要一个特征来看看为什么我们需要更好的分类编码策略。

一个具有25个分类的特征

让我们从一个基本的玩具数据集开始,它包含一个特征和一个连续的目标。这是我们需要的依赖关系:

import numpy as npimport polars as plimport matplotlib.pyplot as pltfrom sklearn.preprocessing import LabelEncoderfrom sklearn.tree import DecisionTreeRegressorfrom sklearn.model_selection import train_test_splitfrom…