【问题标题】:How to generate one hot encoded data for a set of columns with similar categories如何为具有相似类别的一组列生成一个热编码数据
【发布时间】:2020-06-01 21:57:36
【问题描述】:

我从互联网上收集了大量数据来尝试预测运动结果!但是,现在我发现自己对如何准备训练数据集感到困惑。基本上,我有一个如下所示的 DataFrame,当然还有一堆更多的列

            HomeTeam    AwayTeam       HTR   HF      AF  HomePlayStyle  AwayPlayStyle
Date                            
2014-08-16  Arsenal     Crystal Palace  D   13.0    19.0    4-1-4-1         4-2-3-1
2014-08-16  Leicester   Everton         A   16.0    10.0    4-4-2 double 6  4-2-3-1
2014-08-16  Man United  Swansea         A   14.0    20.0    3-5-2           3-5-2
2014-08-16  QPR         Hull City       D   10.0    10.0    5-3-2           5-4-1
2014-08-16  Stoke City  Aston Villa     D   14.0    9.0     4-2-3-1        4-3-3 Attacking

我的因变量(我需要预测的)将是 HTR(3 个类别:D-Draw、A-Away 获胜、H-Home 获胜)。但是在训练之前,由于我需要准备数据集,我相信我需要使用 one-hot encoding 将列 [HomeTeam, AwayTeam, HomePlayStyle, AwayPlayStyle] 更改为 0 和 1。但是,我对这种方法有几个疑问:

  1. HomePlayStyle 和 AwayPlayStyle 具有相似的类别,当我使用一种热编码时,相同的播放风格(示例中的 3-5-2,第 3 个示例)会创建两列,但在技术上它们是相同的。这会影响我的结果吗?或者我应该尝试合并它们还是有办法解决这个问题?当然,即使 4-2-3-1 出现在两列中,但 pd.get_dummies() 会创建 2 列。

  2. 使用 HomeTeam 和 AwayTeam 列(我在不同的数字列中有这些球队的一些时间统计数据,但我相信我需要在训练期间将球队名称保留在数据集中),我应该对它们进行热编码吗?尽管为同一支球队创建了两个专栏(例如,HomeTeam_Arsenal 和 AwayTeam_Arsenal),但我认为这里有一个优势,因为在主场比赛与在客场比赛完全不同。所以这应该不是问题!我是否做出了正确的假设?我什至需要对这些列集进行一次热编码吗?

任何想法都会非常感激。

编辑: 3. 我如何确保我的算法意识到 HomePlayStyle_4-2-3-1(在得到假人之后)实际上代表的是主队而不是客队?是否存在连接列这样的东西,以便我可以分辨哪些列属于 HomeTeam 以及哪些属于 AwayTeam。

【问题讨论】:

  • 是的,您可以分别对 HomePlayStyle 和 AwayPlayStyle 进行 OHE。您想要创建“重复”列,因为这将告诉模型哪个团队(主场或客场)使用什么。出于同样的原因,您还希望分别对团队名称进行 OHE。当然,OHE 只是编码分类变量的可能方法之一。如果您使用神经网络,您可以使用嵌入层,该层可以利用特定团队或游戏风格出现在多个列中的事实,并将此信息嵌入到单个表示中。

标签: python pandas machine-learning training-data one-hot-encoding


【解决方案1】:

您问题的理论部分似乎更适合 CrossValidate,因此我将简要介绍该主题。至于 one-hot 编码,对我来说最简单的方法是通过 pandas:

categorical_cols = ['HomeTeam', 'AwayTeam', 'HomePlayStyle', 'AwayPlayStyle']
X = pd.get_dummies(df, columns=categorical_cols)

这将为每个列中的每个可能值创建一个列,格式为{column_name}_{column_value},因此您将获得类似HomeTeam_Arsenal 的列。

变量问题取决于您考虑使用的模型类型。多重共线性可能是逻辑回归中的一个问题,但在随机森林中则没有那么严重。此外,永远不要忘记商业知识非常重要,因此如果您知道球队在主场或客场比赛时的胜率不同,那么您应该将其包含在您的模型中。如果您不确定,请测试这两个选项。机器学习是一个非常迭代的过程,所以不要害怕尝试多种选择。

【讨论】:

  • 好吧!无论您说什么,对 HomeTeam 和 AwayPlayStyle 列绝对有意义,感谢您澄清这一点,但我想知道 HomePlayStyle 和 AwayPlayStyle 是否同样有意义。鉴于像 4-2-3-1 这样的阵型无论是在主场还是客场都没有区别,删除 HomePlayStyle_4-2-3-1 或 AwayPlayStyle_4-2-3-1 是否合理?
  • 请注意,即使主场和客场的比赛风格相同,您也想知道两支球队的比赛风格。拥有这两列将帮助您准确了解每场比赛中每支球队的风格。如果这对您更有意义,也许可以将其重命名为 Team1PlayStyle 和 Team2PlayStyle
猜你喜欢
  • 2020-05-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 2021-01-04
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多