使用神经网络预测集合

数据挖掘 神经网络
2022-03-05 05:04:25

我正在构建一个用于数据分析的神经网络,但是我被困在我需要多少个输出神经元以及它们应该代表什么上。神经网络试图预测人们对某些对象的选择。有 75 个可能的对象,但问题是,他们一次选择 6 个。这六个可以(理论上,虽然这不会在现实中发生)是 75 个对象的任意组合,在极少数情况下,这六个对象中甚至可能存在某个对象的复制品。

我很自然地考虑为每个可能的集合创建一个输出神经元,但由于这会导致第 75^6 个输出神经元(如果我们考虑重复,则更多)我想这会对学习速度产生不利影响。我考虑的另一个选择是将六个最高评分的项目作为一组,但我不确定这是否可行,因为第二个、第三个等对象的选择取决于选择了哪些较早的对象。我想知道是否有更好、更快或更准确的方法来做到这一点?

编辑,有关训练数据的更多信息:神经网络将用于分析称为英雄联盟的计算机游戏中的游戏项目选择。每场比赛玩家最多可以选择六个项目。这六件物品很可能是基于改变每款游戏的一些因素,例如他们和他们的敌人所玩的游戏角色,以及他们拥有的其他 5 件物品。但是,这样做的原因可能对所有游戏都是通用的。例如,项目相互依赖的(可能)最大的原因是项目统计数据的多重性,如果你已经有一个项目可以让你的攻击更难命中,那么获得一个让你更频繁攻击的项目将会做更多的事情你比得到一个让你的攻击更重的物品。不过,项目选择之间也有一些联系,

2个回答

75^6选项不仅不利于速度,而且是一种非常难以训练的表示,因为 NN 不会“理解”任何输出类别是相关的。您将需要大量数据来训练这样的网络,因为理想情况下,您至少需要一些您希望网络预测的类别中的示例。除非您实际上有数十亿个示例可供训练,否则某些组合可能永远不会出现在您的训练集中,因此永远无法有把握地预测。

因此,我可能会使用 75 个输出,每个对象一个代表它被选中的概率。这很容易创建训练数据,如果您有带有 6 个偏好对象的训练示例 - 选择的对象只有 1,所有其他对象的 0 作为 75 宽标签。

对于预测,选择概率最高的 6 个对象。如果这些选择是推荐系统的一部分(即可能呈现给与预测相同的人),那么您可以使用输出作为权重随机选择项目。您甚至可能会发现这种加权蒙特卡洛选择对于预测大量用户行为也很有效(例如,对于用于股票购买的预测)。此外,可以采用这种随机方法来预测重复项(但不准确,除非可能对许多预测进行平均)。

输出层上的 sigmoid 传递函数有利于表示非排他概率。logloss 目标函数可用于生成误差值并训练网络。

如果您想准确预测所选择的 6 个项目中的重复选项,那么您将需要大量发生重复的示例,并且有一些方法可以在输出层中表示它。例如,您可以将输出神经元的数量增加一倍,每个对象分配两个。第一个概率是选择该项目一次的概率,第二个概率是选择它两次的概率。


该问题已被更新,并且项目之间似乎存在很强的关系,使得选择一组项目可能非常类似于食谱。这可能会降低此答案中上述想法的有效性。

但是,使用 75 个输出可能仍然比其他方法效果更好,并且可能是最简单的设置,所以我建议仍然尝试一下,即使只是为其他想法建立基准。当决策主要由可用的特征数据驱动时,这将最有效,并且在实践中有很多有效的组合项目选择时,因此存在强烈的玩家偏好元素。如果玩家决策中有大量的游戏掌握和逻辑元素来组合物品,那么它的效果就不太好。

我认为您不能拆分组合并将其用于预测。例如:我喜欢炸鱼薯条作为我的第一选择,但炸鱼薯条都可能不在我的前 10 选择中。

一个更好的主意是使用所谓的“支持”。进行一些预处理以找出组合中的哪些组合在您的数据集中至少出现 100 次。仅将这些组合用于训练和预测。您想识别人们选择中的可概括模式,而不是可能偶然发生的事件。(75)6