编码高基数变量



我真的很难处理我正在处理的数据集上的高基数。。。

我使用的数据集有很多分类变量,其中大多数都有很高的基数。

该数据集包含近200万笔金融交易。大多数变量都是分类的,其中一些变量的基数非常高。示例:

"ZIP code"有985个唯一值"street"有999个唯一值"商人"有693个独特的价值"city"具有906个唯一值"纬度"有983个唯一值"经度"有983个唯一值"state"有51个值"cc-num"有999个值……

我读了很多关于使用在线资源的高基数的文章,但仍然无法理解。。我很困惑。

我读过类似于目标编码的"省略一个编码器"是处理高基数的一种很好的技术。我觉得它很好,因为它没有创建任何额外的列。但是,这种类型的编码在计算包含相同值的所有记录的目标变量的平均值时,会产生带有浮点值的输出。

问题是,在编码之后,我需要进行特征选择。当使用MUTUAL INFORMATION作为特征选择技术时,我得到一个错误,说变量不应该是"float类型"。但这就是"遗漏一个"编码技术。

我看到的其他技术是"证据的重量",它认为将提供浮点值作为输出。

我也看到散列编码在高基数下工作得很好,但我认为它很复杂,在提交之前没有太多时间。所以我的想法是使用"Leave One Out"编码器。然后使用互信息进行特征选择,最后使用Bagging、随机森林和Boosting算法创建模型。

看到"Leave One Out"编码技术给我带来的问题。。。另一个选项是使用"频率或计数编码"。但不知道这是否是正确的技术。。。

我的问题是:

1) 。必须在选择特征之前对变量进行编码。我说得对吗?2) 。有没有一种方法我可以做"省略一个编码",并能够使用编码的变量进行特征选择和模型中。3) 。频率编码是一种合适的技术吗?

谢谢!Eva

处理高基数分类变量是机器学习中的一个常见挑战。我会尽力回答你的问题,并提供一些额外的建议:

必须在选择特征之前对变量进行编码。我说得对吗?

  1. 是的,应该在选择功能之前对变量进行编码。在计算相互信息或任何其他特征选择度量之前,您需要将分类变量转换为数字变量

有没有一种方法可以实现"省略一个编码",并能够在功能选择和模型中使用编码变量。

  1. 您可以使用编码的变量进行特征选择和建模。您收到的错误消息可能是因为目标变量的数据类型。确保它的格式适合相互信息计算。另一种选择是使用不同的特征选择技术来处理浮点变量,例如基于相关性的特征选择或Lasso回归

频率编码是一种合适的技术吗?

  1. 频率编码是一种简单的技术,在某些情况下可以很好地工作,但它有其局限性。它用数据集中的频率替换每个类别,如果两个类别的频率相同,这可能会产生问题。一种选择是使用目标编码或保留一个正则化编码,这可以防止过拟合并更有效地处理罕见类别

以下是一些可能有用的建议:

  • 将稀有类别分组为单个";其他";类别如果一个类别在数据集中只出现几次,它可能无法为模型提供足够的信息,并可能导致过度拟合。对这些类别进行分组可以简化问题并降低特征空间的维数。

  • 使用嵌入技术将分类变量映射到低维连续空间中。这可以使用Word2Verc、GloVe或FastText等方法来完成。这些方法可以捕捉类别之间的复杂关系,并降低特征空间的维数。

  • 尝试不同的编码技术,看看哪种最适合你的问题。没有一个一刀切的解决方案,所以用不同的方法进行实验并比较它们的性能很重要。

  • 考虑使用降维技术,如PCA或t-SNE,来降低特征空间的维数。这些技术可以帮助您确定哪些功能对模型最重要,并可以提高其性能。

资源


  • 分类编码方法综述
  • 11分类编码器和基准

最新更新