设想:
我有以下关于参与者、游戏和获胜者的游戏数据,格式如下:
id game player winner
-----------------------------------
1 Monopoly Paul Paul
1 Monopoly Frank Paul
1 Monopoly Sandra Paul
2 Monopoly Peter Katie
2 Monopoly Paul Katie
2 Monopoly Erwin Katie
2 Monopoly Katie Katie
所以上表显示了两场独占比赛的信息,第一场是弗兰克、保罗(获胜者)和桑德拉;第二个是彼得、保罗、欧文和凯蒂(获胜者)。
我的问题是:如果我想预测一场比赛的获胜者,我将如何转换数据以使每一行对应一个会话?
理念一
我最初的想法当然是对“播放器”功能进行热编码:
id game Paul Frank Sandra Peter Erwin Katie winner
-------------------------------------------------------------------------------
1 Monopoly 1 1 1 0 0 0 Paul
2 Monopoly 1 0 0 1 1 1 Katie
这样,使用简单的模型就可以很容易地预测目标。
但是,如果我想预测与玩家 Sandra、Erwin、Katie 和 Tim(新玩家)的新垄断会话的获胜者,则转换后的(即一个热编码的)数据将多一列。该列对模型是未知的,因此无法处理。
想法 2
以想法 1 为例,添加一个“新玩家”二进制虚拟列(新玩家名称无论如何都不包含任何有用的信息),存储获胜者,使用新的(附加)信息重新训练模型。但是,如果我与多个新玩家一起玩,这将不起作用(除非我添加多个虚拟列,这将非常不灵活)。
想法 3
大富翁可以玩 2 到 8 名玩家,所以我可以将表结构更改为以下内容:
id game Pl_0 Pl_1 Pl_2 Pl_3 Pl_4 Pl_5 Pl_6 Pl_7 winner
---------------------------------------------------------------------------------------
1 Monopoly Paul Frank Sandra None None None None None Paul
2 Monopoly Peter Paul Erwin Katie None None None None Katie
然而,这种方法的问题当然是结构假设 the 是玩家占据哪个“座位”背后的语义含义:在第 1 场比赛中,保罗是第 0 场球员(即 is 的值Pl_0)"Paul",但在第 2 场比赛中,保罗是玩家 1(即 的值为Pl_1)"Paul"。在这种结构中,模型无法知道它没有(语义)差异,无论 Paul 是玩家 1 还是玩家 2。此外,不能像那样映射可以由 10 名玩家玩的游戏。所以很快就拒绝了这个想法。或者有什么办法可以克服这个问题?
最后的问题
我如何能够预测游戏的获胜者,这样
- 该模型可以处理新的(看不见的)玩家
- 该模型可以处理具有不同数量玩家的多个游戏