我有一组训练数据,该组中的每个项目由4个数值和1个名义值组成,这是计算这些值的方法的名称。 (有8种方法)
我正在训练神经网络。为了摆脱名义值,我简单地为每个方法分配了1到8的值,并使用一个输入将其传递给神经网络,并使用其他4个输入来传递数值。它有点工作,但结果并不像我想的那么惊人。
所以我的问题是,因为这个简单的数字分配给名义值?或者可能是因为混合了两个不同类别的输入,这些输入并不是真正处于同一水平(数字和方法类型)
答案 0 :(得分:7)
作为一般说明,编码名义值的更好方法是二元向量。在您的情况下,除了4个连续值输入外,您还有8个二进制输入神经元,其中只有一个被激活(1)而另外7个无效。
你这样做的方式暗示了计算方法之间的人为关系,这几乎可以肯定是一种神器。例如,1和2在数字上(从您的网络的角度来看!)接近1和8.但是方法是否为nr。 1和2真的比方法1和8更相似或相关吗?
答案 1 :(得分:6)
由于您没有提供太多细节,我的答案不能非常具体。
一般来说,当将名义值编码为数值时,神经网络往往表现更差,因为转换会对变量施加(可能)错误的排序。混合不同级别的输入也会使性能恶化。
然而,鉴于此处提供的信息很少,无法确定这是否是网络性能“不如您想要的那么惊人”的原因。也可能是因为您没有足够的训练数据,或者您的训练数据包含很多噪音。也许您需要预先扩展数据,也许网络代码中存在错误,也许您为学习算法选择了不合适的常量值...
神经网络没有达到预期效果的原因是多种多样的(在它们之上产生了不合理的高期望值)。没有更多的信息,就无法知道你的问题是什么。
答案 2 :(得分:4)
将类别映射到数值不是统计学中的好习惯。特别是在神经网络的情况下。请记住,神经网络倾向于将类似的输入映射到类似的输出。如果将类别A映射到1并将类别B映射到2(两者都作为输入),NN将尝试为两个类别输出相似的值,即使它们彼此无关。
首选稀疏表示。如果您有4个类别,请按以下方式映射:
A - > 0001
B - > 0010
等
看看"主题:应该如何编码类别?"在这个链接: ftp://ftp.sas.com/pub/neural/FAQ2.html#A_cat
答案 3 :(得分:0)
前面的答案是正确的-不要将标称值映射到任意数字值。但是,如果该属性具有序数性质(例如,“低”,“中”,“高”),则可以通过递增数值来替换标称值,请注意,这可能不是最佳解决方案-因为无法保证例如,根据您的数据的性质,“高” = 3,而应按照建议使用一热比特编码。 原因是神经网络与回归非常相似,因为多个数值会经过某种聚合函数-但这会发生多次。每个输入也乘以权重。 因此,当您输入一个数值时,它会经过一系列数学运算来调整其在网络中的权重。因此,如果将数字值用于非标称数据-映射到更接近的数字值的标称值在最佳情况下(在最坏的情况下)将被视为大致相同,这可能会损害您的模型。