14

我正在尝试使用神经网络解决一些机器学习问题,主要是NEAT进化(增强拓扑的神经进化)。

我的一些输入变量是连续的,但其中一些具有分类性质,例如:

  • 物种:{狮子,豹,虎,美洲虎}
  • 贸易部门:{医疗保健、保险、金融、IT、广告}

起初,我想通过将类别映射到离散数字来对这样的变量进行建模,例如:

{狮子:1,豹:2,老虎:3,美洲虎:4}

但恐怕这会在变量上添加某种任意拓扑。老虎不是狮子和豹子的总和。

通常采用什么方法来解决这个问题?

4

1 回答 1

22

不幸的是,没有好的解决方案,每个都会导致一些问题:

  • 正如您所提到的,您的解决方案是添加拓扑;它可能不是那么糟糕,因为 NN 可以拟合任意函数并表示“ifs”,但在许多情况下它会(因为 NN 经常陷入某些局部最小值)。
  • 您可以以 的形式对数据进行编码is_categorical_feature_i_equal_j,这不会产生任何额外的拓扑结构,但会以二次方的方式增加特征的数量。所以代替“物种”,你会得到“is_lion”、“is_leopard”等特征,而1当时只有其中一个是相等的
  • 如果与可能的分类值相比有大量数据(例如,您有 10000 个数据点,并且只有 10 个可能的分类值),也可以将问题分成 10 个独立的问题,每个问题都针对一个特定的值进行训练(所以我们有“狮子的神经网络”“美洲虎的神经网络”等)

这两种第一种方法是针对“极端”情况的——一种在计算上非常便宜,但会导致高偏差,而第二种方法会引入很多复杂性,但不应影响分类过程本身。最后一个很少可用(由于假设分类值的数量很少),但在机器学习方面却相当合理。

更新

8年的时间变化太多了。解决方案 2 绝对是最受欢迎的解决方案,随着计算的增长、神经网络的广泛采用以及对稀疏输入的支持,成本现在可以忽略不计

于 2013-09-16T10:15:05.207 回答