我有一些关于电子游戏的数据。
数据:
一场比赛有一个matchId。每场比赛包括两支队伍,每支队伍的规模各不相同。例如,3v3、4v4、5v5。。。数据简化如下:
matchId playerId teamId victory
100 200 14 1
100 201 14 1
100 212 14 1
100 220 14 1
100 202 15 0
100 206 15 0
100 214 15 0
100 217 15 0
任务:
我喜欢在Scikit中使用二进制分类器来根据玩家的特征预测胜利值(0/1)。
问题:
- 我正在寻找一种方法来呈现分类器检测哪两支球队对阵的特征,因为比赛的结果取决于对手球队
- 稍后,我想看看哪些球员对比赛结果的影响更大,哪些技能在胜利中更有效。我可以在梯度提升分类器中使用重要性比率吗
一种方法是使用所有player_ids multiplied with 2
(2个团队)的稀疏向量,其中所选的团队用非零值表示,如1。
如果有N players 0, ..., N-1
和team A consists of 1, 3, 5
、team B consists of 0, 2, 4
,则输入如下所示:
x_sample_0 = [0, 1, 0, 1, 0, 1, 0, ...N-1, 1, 0, 1, 0, 1, ...]
...team A... ... team B...
这应该是任务的一个非常强大的表示(就所表示的信息而言),有两个明显的缺点:
- 矢量大小将变大(玩家大小为线性)
- 如果分类器能够使用稀疏数据结构(scipy.s稀疏),这并不重要,因为大多数都是零
- 存在对称性问题,因为每对A对B也可以编码为B对A
- 以加倍输入样本量为代价,我强烈建议添加对称配对作为额外样本(样本量加倍)
- 记住也翻转输出(意思是:从一线队的角度将y编码为输赢)
- 也许强制执行字典排序可以在两对之间输出一个定义明确的顺序(如果玩家不能自己玩的话)作为一种选择(我会先尝试上面的)
- 以加倍输入样本量为代价,我强烈建议添加对称配对作为额外样本(样本量加倍)
编辑:
还有一种选择:
- 为每个可能的团队(例如
f_0 = team of 0, 2, 4
)引入一个变量,并根据统计数据使用具有不同向量大小的表示 - 这种情况会丢失一些信息,需要更多的数据