使用神经网络估算输出的类别和幅度

时间:2018-02-05 19:45:11

标签: machine-learning neural-network

让我们说我想计算一年级学生将参加哪些课程,以及他们将从所述课程中获得哪些等级。我们有以前学生的课程和每年(不仅仅是最后一年)的课程和成绩的数据。我们还有我们想要估算结果的学生的前几年的成绩和课程数据。我想使用具有长短期记忆的递归神经网络来解决这个问题。 (我知道这个问题可以通过回归来解决,但是我希望神经网络专门用来查看这个问题是否可以用一个方法正确解决)

我想要设置输出(标签)空间的方法是为学生可以采用的每个可能课程提供一个功能,并在每个条目中得到0到1之间的结果来描述是否学生将参加课程(如果没有,该课程的参赛作品将为0)如果是,他们的分数是什么(即如果学生参加A级并获得57%,那么A级的标签将为0.57 in它)

我是否正确设置了输出空间?

  • 如果是,我应该使用哪些优化和激活功能?

  • 如果不是,我如何重新塑造输出空间以获得良好预测?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望为网络提供学生的历史记录,然后为每门课程输出一个条目。此条目应该同时表示学生是否参加该课程(0表示不参加课程,1表示参加课程),还能给出预期成绩?然后对单个课程的输出的解释将是这样的:

0.0 -> won't take the course
0.1 -> will take the course and get 10% of points
0.5 -> will take the course and get half of points
1.0 -> will take the course and get full points

如果这确实是你的计划,我肯定会建议重新考虑一下。 一些明显现实的案例不符合这种模式。例如,你如何代表(A +) - 学生“不太可能”选修一门课程?如果网络输出0.9999,因为(s)他很可能获得最大分数,如果他选择了该课程,或者网络输出0.0001,因为学生不太可能参加课程?

相反,您应该在[0,1]之间为每个学生和每门课程输出两个值。

  • [0,1]中的第一个值给出了学生参加课程的概率
  • [0,1]中的第二个值给出了预期的相对点数。

作为损失,我建议在第一个值上使用二进制交叉熵,在第二个值上使用简单的平方误差,然后使用您选择的某个L ^ p度量结合所有损失(例如,简单地添加所有内容)对于p=1,方括号并添加p=2)。

几个例子:

(0.01, 1.0) : very unlikely to participate, would probably get 100%
(0.5, 0.8): 50%-50% whether participates or not, would get 80% of points
(0.999, 0.15): will participate, but probably pretty much fail

您希望输出的数量似乎与这两者的产品类似,这有点难以解释。

答案 1 :(得分:0)

解决此问题的方法不止一种。安德烈的回答给出了一个很好的方法。

我想建议通过将成绩分成类别并为输入和输出添加“未拍摄”的附加类别来简化问题。

这会将任务转变为分类问题,并解决了尝试区分接收低级别而不是输出课程的问题。

例如,您的训练集可能包含m名学生,n个可能的课程,以及六种可能的结果:['A', 'B', 'C', 'D', 'F', 'did_not_take']

您可以选择以下架构:

Input -> Dense Layer -> RELU -> Dense Layer -> RELU -> Dense Layer -> Softmax

您的输入形状为(m, n, 6),输出形状可能为(m, n*6),您可以为每组6个输出(对应于一个类)应用softmax,并将其合计为单个损失值。这是multiclass, multilabel classification的一个例子。

我首先尝试每个隐藏层中的2n个神经元。

但是,如果您真的想要成绩的连续输出,那么我建议使用单独的分类和回归网络。这样,您就不必将分类和回归损失合并为一个数字,这可能会导致缩放问题。

您可以仅保留输入数据的等级存储桶,因此两个网络采用相同的输入数据,但对于等级回归网络,您的最后一层可以是n带有log loss的sigmoid单位。这些将输出01之间的数字,对应每个类别的预测等级。

如果您想进一步甚至,请考虑使用一种考虑学生上一课的顺序的架构。例如,如果一名学生在前一年学习法语,那么他/她今年参加法语II的可能性比他/她参加法国新生一年更有可能,之后不会继续学习法语。