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

我有一个学校项目,需要使用Weka工具制作一个预测足球(足球)比赛的程序。

由于算法已经存在(J48算法),我只需要数据。我找到一个网站,免费提供足球比赛数据,我在Weka中尝试过,但预测结果非常差,所以我认为我的数据结构不正确。

我需要从我的来源中提取数据,并以另一种方式格式化它,以便为我的模型创建新的属性和类。有人知道如何正确创建用于机器学习预测的属性和类的课程/教程/指南吗?是否有标准描述了为训练机器学习算法选择数据集属性的最佳方式?这方面的做法是什么?

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

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


回答:

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

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

J48算法试图在树的每一层使用熵来找到最相关的变量。树中的每条路径都可以被视为一个AND条件:V1==a & V2==b …

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

所以,要回答你的问题,你不仅需要找到一个能够覆盖“一般”人群中最常见变量配置的训练集,还需要找到一个能够忠实地代表这些训练案例的算法。忠实意味着它通常适用于未见过的案例。

这不是一件容易的事。许多人和大量资金都参与了体育博彩。如果选择合适的训练集就这么简单,你可以肯定它早就被发现了。

编辑:

评论中有人问如何找到合适的算法。答案是就像在干草堆里找针一样。没有固定的规则。你可能会幸运地偶然发现它,但在巨大的搜索空间中,你永远不会知道你是否已经找到了。这与在非常复杂的搜索空间中找到最优点的问题相同。

短期答案是

  • 思考算法真正能实现什么。 J48(及其类似)算法最适合用于变量对结果的影响已知且遵循层次结构的分类。花卉分类是一个它可能会表现出色的例子。

  • 对训练集进行模型检查。 如果它在训练集上的表现很差,那么它在未见数据上的表现可能会很差。一般来说,你应该期望模型在训练集上的表现超过在未见数据上的表现。

  • 算法需要用它从未见过的数据进行测试。 对训练集进行测试,虽然是一个快速的淘汰测试,但可能会导致过度自信。
  • 保留一些数据用于测试。 Weka提供了这样做的方法。最佳情况是构建模型时排除一个案例(留一法),然后看看模型在这些案例上的平均表现如何。

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

第二个陷阱是让测试结果影响你构建模型的方式。例如,尝试不同的模型参数直到得到可接受的测试响应。对于J48来说,让这种偏见悄悄进入并不容易,但如果它确实发生了,那么你就把测试集用作了辅助训练集。

  • 继续收集更多数据;尽可能长时间地进行测试。 即使在做了以上所有事情之后,你仍然不会知道算法的有用性,除非你能观察它对未来案例的表现。当一个看似好的模型开始表现不佳时,就该回到绘图板前了。

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

这可能不是你想要的答案,但这就是事情的现状。

总结来说,

  1. 训练数据集应该覆盖“显著”的变量配置
  2. 你应该对未见数据验证模型

识别(1)和执行(2)是棘手的部分。没有明确的食谱可循。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注