我正在尝试使用神经网络解决一些机器学习问题,主要是使用NEAT
进化(增强拓扑的神经进化)。
我的一些输入变量是连续的,但其中一些具有分类性质,例如:
- 物种:{狮子,豹子,老虎,美洲虎}
- 行业:{医疗保健、保险、金融、IT、广告}
起初,我想通过将类别映射到离散数字来对这样的变量进行建模,例如:
{狮子:1,豹子:2,老虎:3,美洲虎:4}
但恐怕这会在变量上添加某种任意拓扑。老虎不是狮子和豹子的总和。
通常采用什么方法来解决这个问题?
不幸的是,这儿没有good解决方案,每个都会导致某种问题:
- 正如您所提到的,您的解决方案是添加拓扑;它可能没那么糟糕,因为 NN 可以拟合任意函数并表示“if”,但在许多情况下它会(因为 NN 经常陷入某些局部最小值)。
- 您可以以以下形式对数据进行编码
is_categorical_feature_i_equal_j
,这不会产生任何额外的拓扑,但会以二次方的方式增加特征数量。因此,代替“物种”,您会得到特征“is_lion”、“is_leopard”等,并且只有其中一个是相等的1
当时
- 如果与可能的分类值相比数据量很大(例如,您有 10000 个 od 数据点,并且只有 10 个可能的分类值),也可以将问题分成 10 个独立的问题,每个问题都针对一个特定值进行训练(因此我们有“狮子的神经网络”“美洲虎的神经网络”等)
这两种方法适用于“极端”情况 - 一种方法的计算成本非常低,但可能导致高偏差,而第二种方法则引入了很多复杂性,但不应影响分类过程本身。最后一种很少可用(由于假设了少量的分类值),但在机器学习方面相当合理。
Update
8年里发生了很多事情。解决方案 2 绝对是最受欢迎的一种,随着计算量的增长、神经网络的广泛采用以及稀疏输入的支持,成本现在可以忽略不计
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)