如何建模分类变量/枚举?

人工智能 深度学习 分类数据
2021-11-09 03:01:31

我是该领域的新手,我试图了解如何使用分类变量/枚举?

假设我们有一个数据集,其中 2 个特征是home_teamaway_team,这两个特征的可能值是所有 NBA 球队。我们如何“规范化”这些特征以便能够使用它们来创建深度网络模型(例如使用 tensorflow)?

任何关于建模技术的阅读参考也非常受欢迎。

2个回答

作者使用许多不同的方法。

一种方法是为每个可能的类别使用不同的输入神经元,然后使用“1-hot”编码。因此,如果您有 10 个类别,那么您可以将其编码为 10 个二进制特征。

另一种是使用某种二进制编码。如果您有 10 个类别,则使用 4 个神经元通过使用二进制数来表示所有可能的类别就足够了。

第三种方法是将您的类别转换为基值,然后对其进行规范化。如果您的类别真的很重要(即可订购),这可能会更有效。但是,如果它们没有自然的顺序,这可能会导致奇怪的结果或使问题难以学习(因为它最终会在不需要存在的学习问题中嵌入非线性关系)。

约翰的回答中所述,单热编码可能是最直接/最简单的解决方案(甚至可能是最常见的?)。但它并非没有问题。例如,如果您有大量此类分类变量,并且每个变量都有大量可能的值,则 one-hot 编码所需的二进制输入数量可能会变得太大。

假设我们有一个数据集,其中 2 个特征是 home_team 和 away_team,这 2 个特征的可能值是所有 NBA 球队。

在这个具体的例子中,一个不同的可能解决方案可能是不使用团队的“身份”作为特征本身,而是尝试找到与该团队对应的一些(理想情况下是数字的)特征。

例如,与其尝试在输入中以某种方式对“home_team”进行编码,您可以(如果您设法找到执行此操作所需的数据)使用以下功能(不太熟悉 NBA,因此不确定是否所有这些是有道理的):

  • 最近 X 段时间内主队的胜率
  • 主队对阵客队的历史胜率
  • 这支球队每场比赛的平均得分
  • 在足球中,每场比赛有多少分钟可以“控制”球,也许在 NBA 也有类似的东西?
  • 等等。

然后您可以尝试为 away_team 获取类似的功能列表。

这种解决方案适用于您的示例,也可能适用于其他各种示例。但是,它可能不适用于所有分类特征的情况,在某些情况下,您必须恢复到像约翰回答中的那些解决方案。