我已经和 Weka 合作了一段时间,在我对它的研究中,我发现很多代码示例都使用了测试和训练集。例如,对于离散化和贝叶斯网络,他们的示例几乎总是使用测试集和训练集来展示。我可能在这里缺少对数据处理的一些基本理解,但我不明白为什么似乎总是如此。我在一个项目中使用离散化和贝叶斯网络,对于它们两者,我都没有使用过测试或训练集,也不明白为什么我需要这样做。我在 BayesNet 上执行交叉验证,所以我正在测试它的准确性。我是否误解了测试和训练集的用途???哦,请使用最简单的术语;我对数据处理领域的经验还不是很丰富。
2 回答
训练和测试集背后的想法是测试泛化错误。也就是说,如果你只使用一个数据集,你可以通过简单地学习这个数据集来达到完美的准确性(这就是最近邻分类器所做的,IBk
在 Weka 中)。通常,这不是您想要的——机器学习算法应该学习您提供的示例数据背后的一般概念。测试是否发生这种情况的一种方法是使用单独的数据进行训练和测试。
如果您使用交叉验证,则您使用的是单独的训练集和测试集。这只是一种将整个数据集划分为训练和测试的方法。例如,如果您进行 10 折交叉验证,您的整个数据将被分成 10 组大小相等的集合。其中九个被组合起来用于训练,剩下的一个用于测试。然后重复该过程,将九个不同的集合组合起来进行训练,依此类推,直到所有十个单独的分区都已用于测试。
所以训练/测试集和交叉验证在概念上做同样的事情,交叉验证只是通过对整个数据集进行平均来采取更严格的方法。
训练数据是指用于“建立模型”的数据。例如,如果您使用算法 J48(树分类器)对实例进行分类,则训练数据将用于生成表示“学习概念”的树,该树应该是概念的概括。这意味着学习的规则、生成的树、调整后的神经网络或其他任何东西;将能够获得新的(未见过的)实例并对它们进行正确分类(“学习概念”不依赖于训练数据)。
测试集是用于测试模型是否正确学习概念的数据的百分比(它独立于训练数据)。
在 WEKA 中,您可以运行一个执行,将您的数据集拆分为训练数据(在 J48 的情况下构建树)和测试数据(测试模型以确定已学习该概念)。例如,可以将 60% 的数据用于训练,40% 用于测试(确定需要多少数据进行训练和测试是数据挖掘的关键问题之一)。
但我建议您快速浏览一下交叉验证,这是一种在 WEKA 中实现的强大测试方法。这里已经很好地解释了: https ://stackoverflow.com/a/10539247/1565171
如果您有更多问题,请发表评论。