如何为二元分类器提供输入对?

时间:2017-02-06 12:05:18

标签: python scikit-learn classification

我有一些关于视频游戏的数据。

数据:

匹配有一个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)。

问题:

  1. 我正在寻找一种方法来呈现分类器检测哪两支球队相互比赛的特征,因为比赛结果取决于对手球队。
  2. 之后,我想看看哪些球员对比赛结果有更大影响,哪些技能在胜利方面更有效。我可以在Gradient Boosting Classifier?
  3. 中使用重要性率

1 个答案:

答案 0 :(得分:0)

一种方法是使用所有player_ids multiplied with 2(2个团队)的稀疏矢量,其中所选择的那些用非零值表示,如<1。

如果有N players 0, ..., N-1team A consists of 1, 3, 5team 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.sparse)并不重要,因为大多数都是零
  • 存在对称性问题,因为每个配对A与B也可以编码为B对A
    • 以加倍输入样本大小为代价,我强烈建议添加对称配对作为额外样本(样本大小加倍)
      • 记得也要翻转输出(意思是:将y编码为第一队视角的赢/输)!
    • 可能会强制执行一个词典排序,它总是在两个配对之间输出一个明确定义的顺序(如果玩家不能自己玩)可以作为替代(我会先尝试上面这个)

修改

还有一个选择:

  • 为每个可能的团队引入一个变量(例如f_0 = team of 0, 2, 4)并使用此表示形式,该表示形式具有不同的矢量大小,具体取决于统计数据
  • 这种丢失了一些信息,需要更多的数据