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

Posted

技术标签:

【中文标题】如何为机器学习和预测构建良好的训练数据集?【英文标题】:How to build a good training data set for machine learning and predictions? 【发布时间】:2016-07-10 19:40:23 【问题描述】:

我有一个学校项目要编写一个程序,该程序使用 Weka 工具对足球(足球)比赛进行预测。

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

编辑:

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

一个短期的答案是

想想算法能真正完成什么。 J48(和类似的)算法最适合分类,其中变量对结果的影响众所周知并且遵循层次结构.花卉分类是它可能会出类拔萃的一个例子。

对照训练集检查模型。如果它在训练集上表现不佳,那么它在处理未知数据时可能表现不佳。通常,您应该期望模型对训练的性能超过对看不见的数据的性能。

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

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

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

继续收集更多数据;尽可能长时间地进行测试。 即使经过上述所有操作,您仍然不会知道该算法有多大用处,除非您可以观察其在未来案例中的表现。当看起来不错的模型开始表现不佳时,就该回到绘图板上了。

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

这可能不是您要寻找的答案,但事情就是这样。

总之,

    训练数据集应涵盖“重要”变量配置 您应该根据看不见的数据验证模型

识别 (1) 和执行 (2) 是棘手的部分。没有什么可遵循的干货食谱。

【讨论】:

感谢您的回复。首先我应该说我确实修改了我在第一篇文章中链接的数据集。我删除了所有的投注赔率栏。我认为我的数据集结构错误的原因是因为查看决策树我可以看到算法考虑的最重要的属性是球队 1 进球和球队 2 进球。在进行结果预测时,这些统计数据不可用,因此应将其消除。但是,我将尝试连接多个数据集并再次运行测试以查看是否有任何变化。 其次,如何找到合适的算法?这需要花费大量时间尝试各种不同的算法,甚至需要花费更多时间检查真实预测,看看它们是否有效以及成功率如何。这绝对是疯了 我已经编辑了答案以解决“如何获得正确的算法”部分。不幸的是,没有一个万能的答案。自我注意:不要使用编号列表项。在其中两个之间插入新项目需要大量工作。我做了很多修改才得出这个结论。 至于哪些变量最重要,请尝试使用 J48 选择的最重要的三个变量作为唯一的预测变量(假设结果是确定比赛中的强队)。这可能会让您感到惊讶,但您可能永远不会超过此性能,除非针对特定数据集。如果衬衫的颜色是可行的预测指标,但与得分记录无关,则 J48 无法识别模型,例如(得分记录或他们穿黄色衬衫)。

以上是关于如何为机器学习和预测构建良好的训练数据集?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习 Out-of-Fold 折外预测详解 | 使用折外预测 OOF 评估模型的泛化性能和构建集成模型

如何在 Azure 机器学习中使用历史数据集进行训练和预期数据集作为预测的输入

机器学习

机器学习基础:(Python)训练集测试集分割与交叉验证

机器学习:基于支持向量机(SVM)进行人脸识别预测

机器学习:基于支持向量机(SVM)进行人脸识别预测