如何设置神经网络输出序数数据?


20

我设置了神经网络来预测输出变量为序数的事物。我将在下面使用三个可能的输出A <B <C进行描述。

很明显,如何使用神经网络输出分类数据:输出只是最后一个(通常是完全连接的)层的softmax,每个类别一个,而预测类别是最大输出值的类别(这是许多流行型号的默认设置)。我一直在使用相同的顺序值设置。但是,在这种情况下,输出通常没有意义,例如,A和C的网络输出为高,而B的网络为低:这对于序数值是不合理的。

我对此有一个想法,即根据输出与A的1 0 0,B的1 1 0和C的1 1 1进行比较来计算损耗。确切的阈值可以稍后使用另一个分类器(例如,贝叶斯(Bayesian))进行调整。 ),但这似乎捕获了输入排序的基本思想,而没有规定任何特定的间隔比例。

解决此问题的标准方法是什么?是否有任何研究或参考文献描述了不同方法的利弊?


1
我在Google上因“
常规

@ssdecontrol:有趣。我尝试过这个; 结果要好于选择一个具有最高值的输出,但比其他方法(朴素贝叶斯等)要差一些。这很有用,但是它无助于训练网络,只能在事后稍微改善结果……或者至少我不知道如何使它有助于训练网络。
Alex I

您尝试了哪个“它”?我唯一
要说的

另外,我不确定我的意思是“例如,A和C的网络输出较高,而B的网络输出较低:这是不合理的”。您的意思是您预测的As和C数量很多,而B却很少?除非您有实质性或特定领域的理由,否则我不认为这应该是不合理的
Shadowtalker

我也不知道您怎么会有“ 1 1 0”之类的输出。我认为这里的术语有些混乱。您是否在描述序数累积结果?像累积logit模型一样?
Shadowtalker'3

Answers:


15

ķķ

但是有些人已经设法为您的序数类发明了一种聪明的编码(请参见stackoverflow答案)。这是一种一次性编码,

  • 1类表示为[0 0 0 0 ...]

  • 类2表示为[1 0 0 0 ...]

  • 类别3表示为[1 1 0 0 ...]

Pÿ^<ķnp.sum

这种策略类似于Frank和Hall的合奏,我认为这是此类策略的首次出版


这种方法似乎更具吸引力。重要的是要意识到使用预测模式将其转变为分类问题不是一个好主意。可以将预测的累积概率转换为预测的单个概率,因此可以在已知效用的很久以后插入用于做出最终决策的效用函数。请参阅fharrell.com/post/classification
Frank Harrell '18

1
@RicardoCruz-嗯,听起来很像我的建议:“ A 1 0 0,B 1 1 0,C 1 1 1”。很高兴知道这可行!此外哇,这是一个纸从2007年,这个想法已经存在了很长一段时间
亚历我

是的,当我发现那张纸时,我感到很惊讶!
里卡多·克鲁兹

注意:如“序数回归的神经网络方法”所述:“ ...对输出节点使用独立的S型函数不能保证单调关系(o1> = o2> = ....> = oK),即不是必需的,但对于做出预测是理想的。” 因此,仅在预测时执行“ np.sum”不是最佳方法。
sccrthlt

1
编辑以上我的评论:在神经网络的输出上执行“ np.sum”会产生误导。当输出矢量为[0 1 0 1 0]时,可能会出现以下情况。对这个向量执行求和将产生2类预测,而实际上神经网络不确定。
sccrthlt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.