【问题标题】:How present pairs of inputs for binary classifier?如何呈现二进制分类器的输入对?
【发布时间】:2017-02-06 12:05:18
【问题描述】:

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

数据:

一场比赛有一个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? 中使用重要性率吗?

【问题讨论】:

    标签: python scikit-learn classification


    【解决方案1】:

    一种方法是使用所有player_ids multiplied with 2(2 个团队)的 sparse-vector,其中选择的对象用 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 vs. B 也可以编码为 B vs. A
      • 以输入样本量加倍为代价,我强烈建议添加对称配对作为额外样本(样本量加倍)
        • 记住也要翻转输出(意思是:从一线队的角度将 y 编码为赢/输)!
      • 可能会强制执行字典排序,这将始终在两个配对之间输出明确定义的顺序(如果玩家不能自己玩)可以用作替代方案(我会先尝试上述方法)

    编辑:

    另一种选择:

    • 为每个可能的团队引入一个变量(例如f_0 = team of 0, 2, 4),并根据统计数据使用具有不同向量大小的表示
    • 这种类型会丢失一些信息,需要更多数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-02
      • 2012-12-04
      • 2018-05-30
      • 2021-05-02
      • 2017-07-15
      • 1970-01-01
      • 2018-09-01
      • 2020-07-20
      相关资源
      最近更新 更多