如何为机器学习和预测构建良好的训练数据集?

How to build a good training data set for machine learning and predictions?

我有一个学校项目要制作一个程序,使用 Weka 工具对足球比赛进行预测。

既然算法已经有了(J48算法),我只需要数据。我找到了一个免费提供足球比赛数据的网站,我在 Weka 中尝试了它,但预测非常糟糕,所以我认为我的数据结构不正确。

我需要从我的源中提取数据并以另一种方式对其进行格式化,以便为我的模型制作新属性和 类。有谁知道关于如何正确创建属性的 course/tutorial/guide 和关于机器学习预测的 类?是否有一个标准描述了选择数据集属性以训练机器学习算法的最佳方式?对此的处理方法是什么?

这是我目前拥有的数据示例:http://www.football-data.co.uk/mmz4281/1516/E0.csv

列的含义如下:http://www.football-data.co.uk/notes.txt

问题可能是你的数据集太小了。假设您有十个变量,每个变量的范围为 10 个值。这些变量有 10^10 种可能的配置。您的数据集不太可能有这么大,更不用说涵盖所有可能的配置了。诀窍是将变量缩小到最相关的变量,以避免这种大的潜在搜索 space.

第二个问题是某些变量组合可能比其他变量更重要。

J48 算法尝试使用树中每个级别的熵找到最相关的变量。通过树的每条路径都可以被认为是一个 AND 条件:V1==a & V2==b ...

这涵盖了由于联合互动而产生的重要性。但是,如果结果是 A&B&C OR W&X&Y 的结果呢? J48 算法只会找到一个,并且它将是第一个选择的变量在单独考虑时具有最大整体意义的那个。

因此,要回答您的问题,您不仅需要找到一个涵盖 "general" 总体中最常见变量配置的训练集,还需要找到一个能够忠实地代表这些训练案例的算法。忠实的意思它通常适用于看不见的情况。

这不是一件容易的事。很多人和很多钱都参与了体育博彩。如果它像选择合适的训练集一样简单,你可以肯定它现在已经找到了。

编辑:

评论中有人问你如何找到合适的算法。答案就像大海捞针一样。没有固定的规则。您可能很幸运并且偶然发现了它,但是在大量搜索 space 中您永远不会知道自己是否找到了。这与在非常复杂的搜索中找到最佳点的问题相同 space。

短期答案是

  • 想想算法真正能完成什么。 J48(和类似)算法最适合变量对结果影响的分类众所周知并遵循等级制度。花卉分类就是一个例子,它可能 excel.

  • 根据训练集检查模型。如果它在训练集上表现不佳,那么它在未见数据上的表现可能会很差。通常,您应该期望模型针对训练的性能超过针对未见数据的性能。

  • 算法需要用从未见过的数据进行测试。针对训练集进行测试,虽然是快速消除测试,但可能会导致过度自信。
  • 保留一些数据用于测试。Weka 提供了一种方法来执行此操作。最好的情况是在除一种情况(Leave On Out Approach)之外的所有情况下构建模型,然后查看模型在这些情况下的平均表现。

但这假设手头的数据在某种程度上没有偏差。

第二个陷阱是让测试结果偏离您构建 model.For 示例的方式,尝试不同的模型参数,直到获得可接受的测试响应。使用 J48 不容易让这种偏差蔓延,但如果确实如此,那么您只是将测试集用作辅助训练集。

  • 继续收集更多数据;尽可能长时间地进行测试。 即使在进行了上述所有操作之后,除非您可以观察其在未来案例中的表现,否则您仍然不会知道该算法有多有用。当看起来不错的模型开始表现不佳时,就该重新开始设计了。

令人惊讶的是,有大量领域(主要是软科学)没有看到用未来数据验证模型的必要性。但这是一个更好地讨论的问题。

这可能不是您正在寻找的答案,但事实就是如此。

综上所述,

  1. 训练数据集应涵盖'significant'变量配置
  2. 你应该根据看不见的数据验证模型

识别 (1) 和执行 (2) 是棘手的部分。没有一成不变的食谱可循。