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

时间:2016-03-23 13:25:21

标签: machine-learning weka j48

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

所以,为了回答你的问题,你不仅要找到一套训练集,它将涵盖"一般"中的最常见的变量配置。人口,但找到一个忠实代表这些训练案例的算法。忠实的意思通常适用于看不见的案件。

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

编辑:

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

短期答案是

  • 考虑算法可以真正实现的目标。 J48(和类似的)算法最适合于分类,其中变量对结果的影响是众所周知的并遵循层次结构。花卉分类是一个可能会出类拔萃的例子。

  • 根据训练集检查模型。如果训练集的表现不佳,那么看不见的数据可能会导致性能不佳。通常,您应该期望模型对培训的性能超过针对看不见的数据的性能。

  • 该算法需要使用从未见过的数据进行测试。对训练集进行测试,同时快速消除测试,可能会导致过度自信。
  • 保留一些数据进行测试。 Weka提供了一种方法。最好的情况是在除了一个(Leave On Out Approach)之外的所有情况下构建模型,然后看看模型如何平均地执行这些模型。

但这假设手头的数据不会有某种偏见。

第二个缺陷是让测试结果偏向于构建模型的方式。例如,尝试不同的模型参数,直到获得可接受的测试响应。使用J48并不容易让这种偏差进入,但如果确实存在,那么你刚刚将测试集用作辅助训练集。

  • 继续收集更多数据;尽可能长时间地进行测试。即使在上述所有情况之后,您仍然不知道该算法有多大用处,除非您能够针对未来情况观察其性能。如果看起来好的模型开始表现不佳,那么现在是时候回到绘图板了。

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

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

总之,

  1. 训练数据集应涵盖“重要”数据集。变量配置
  2. 您应该根据看不见的数据验证模型
  3. 识别(1)和做(2)是棘手的比特。没有切割和干燥的配方可供使用。