“帮助理解交叉验证和决策树”
大师
你好,
我确实在理解决策树算法与交叉验证相结合的工作方式方面存在一些问题。Stack Overflow上的另一个用户显然也有同样的问题,我无法用更好的方式来表达。所以我很抱歉只是简单地复制粘贴它:
http://stackoverflow.com/questions/2314850/help-understanding-cross-validation-and-decision-trees
我一直在阅读决策树和交叉验证,我理解这两个概念。然而,我很难理解交叉验证,因为它与决策树有关。本质上,交叉验证允许您在数据集相对较小时在训练和测试之间交替进行,以最大限度地提高误差估计。一个非常简单的算法是这样的:
1.决定你想要折叠的次数(k)
2.将数据集细分为k个折叠
3.对训练集使用k-1次折叠来构建树。
4.使用测试集来估计树中错误的统计信息。
5.把你的结果留到以后
6.重复步骤3-6 k次,留下不同的折叠为您的测试集。
7.对迭代中的错误进行平均,以预测总体错误
我不能解决的问题是,最后你会有k棵决策树,它们可能略有不同因为它们可能不会以同样的方式分裂,等等。你摘哪棵树?我的一个想法是选择一个误差最小的(尽管这并不意味着它是最优的,只是因为它在给定的折叠上表现最好——也许使用分层会有所帮助,但我读过的所有东西都说它只有一点点帮助)。
正如我所理解的那样,交叉验证的重点是计算节点统计信息,这些统计信息以后可以用于修剪。所以实际上树中的每个节点都有根据给定的测试集计算出来的统计数据。这些在节点统计中很重要,但是如果你平均你的误差。如何在k棵树的每个节点中合并这些统计数据,因为每棵树的分裂选择都不同,等等。
计算每次迭代的总误差有什么意义?这不是修剪时可以使用的东西。
(/报价)
张贴的答案并没有真正回答我的问题。首先,在我的理解中,不应该使用相同的数据进行训练和测试。因此,使用100%的数据进行训练,然后使用相同的数据测试模型是不可行的。其次,当您将决策树学习器放在交叉验证操作符的左侧(训练)部分时,它确实应该为每次迭代创建一个(可能不同的)模型。因此,问题仍然存在:最后选择哪棵树(选择输出模型时看到的那棵树)?或者这实际上是某种平均模型?
或者说,X验证的目的不是创建一个模型,而是看一个具有特定参数的学习器如何处理你的数据?然而,在这种情况下,我不明白您将如何构建实际的模型。如果您使用100%的数据进行训练,则不会留下任何用于后修剪和防止过拟合的测试数据……
非常感谢您对这个话题的一些启发,并致以最良好的问候
专员Hanspeter
我确实在理解决策树算法与交叉验证相结合的工作方式方面存在一些问题。Stack Overflow上的另一个用户显然也有同样的问题,我无法用更好的方式来表达。所以我很抱歉只是简单地复制粘贴它:
http://stackoverflow.com/questions/2314850/help-understanding-cross-validation-and-decision-trees
我一直在阅读决策树和交叉验证,我理解这两个概念。然而,我很难理解交叉验证,因为它与决策树有关。本质上,交叉验证允许您在数据集相对较小时在训练和测试之间交替进行,以最大限度地提高误差估计。一个非常简单的算法是这样的:
1.决定你想要折叠的次数(k)
2.将数据集细分为k个折叠
3.对训练集使用k-1次折叠来构建树。
4.使用测试集来估计树中错误的统计信息。
5.把你的结果留到以后
6.重复步骤3-6 k次,留下不同的折叠为您的测试集。
7.对迭代中的错误进行平均,以预测总体错误
我不能解决的问题是,最后你会有k棵决策树,它们可能略有不同因为它们可能不会以同样的方式分裂,等等。你摘哪棵树?我的一个想法是选择一个误差最小的(尽管这并不意味着它是最优的,只是因为它在给定的折叠上表现最好——也许使用分层会有所帮助,但我读过的所有东西都说它只有一点点帮助)。
正如我所理解的那样,交叉验证的重点是计算节点统计信息,这些统计信息以后可以用于修剪。所以实际上树中的每个节点都有根据给定的测试集计算出来的统计数据。这些在节点统计中很重要,但是如果你平均你的误差。如何在k棵树的每个节点中合并这些统计数据,因为每棵树的分裂选择都不同,等等。
计算每次迭代的总误差有什么意义?这不是修剪时可以使用的东西。
(/报价)
张贴的答案并没有真正回答我的问题。首先,在我的理解中,不应该使用相同的数据进行训练和测试。因此,使用100%的数据进行训练,然后使用相同的数据测试模型是不可行的。其次,当您将决策树学习器放在交叉验证操作符的左侧(训练)部分时,它确实应该为每次迭代创建一个(可能不同的)模型。因此,问题仍然存在:最后选择哪棵树(选择输出模型时看到的那棵树)?或者这实际上是某种平均模型?
或者说,X验证的目的不是创建一个模型,而是看一个具有特定参数的学习器如何处理你的数据?然而,在这种情况下,我不明白您将如何构建实际的模型。如果您使用100%的数据进行训练,则不会留下任何用于后修剪和防止过拟合的测试数据……
非常感谢您对这个话题的一些启发,并致以最良好的问候
专员Hanspeter
0


答案
如何在RapidMiner中选择验证记录?它们是从训练集中自动选择的吗?验证方法(如x验证)完全不影响修剪后步骤的假设是否正确?是否有可能影响培训记录与验证记录的比例?
在构建“最终模型”时建议采取哪些步骤?
首先通过x验证等方法找到最合适的算法和参数。
然后用这个算法和参数对整个可用的数据建立最终的模型?
非常感谢你提供的一些见解。
文本有时并不是解释的媒介,所以我建议你从包含验证的众多示例中挑选一个,然后用你面前的图形表示提出问题。它们不这样做,它们从验证器获得示例,验证器在其他示例上使用它们生成的模型。是的,通过验证器。这是不正确的验证器进一步划分训练集。学习器可以进一步划分训练示例以生成模型,但这是内部的,不会改变验证器完成的示例分割。验证器选择测试示例。RapidMiner中有几个验证器,每个用于不同的场景,每个都有不同的选择方法和参数…是的。这就是图片的来源,看看输入学习者它只是训练样本集。在不同的验证器和它们的参数下…验证和参数优化只是构建应用程序所需的几个构建块中的两个,您提到的应用程序属于邮件发送的商业领域。在商业基础上联系RM是否没有意义,无论是培训还是咨询,时间就是金钱等等?就是2c。
非常感谢您详尽的回答!
使用测试数据集进行验证以获得性能度量的原则对我来说非常清楚。我不确定的是模型细化是如何完成的。例如,对于后修剪需要来自训练集的验证记录,而不是测试集。然后使用测试集来获得最终模型在细化后的性能。至少杜洪波在《数据挖掘技术与应用》中是这样描述的。因此,由于您不能定义验证记录,而只能定义测试集,因此我不了解Rapidminer中的后修剪如何工作。Rapidminer是否为此使用测试集?这是否意味着,如果不选择验证器,就不能进行任何后剪枝?还是像你说的那样基本上,下面的假设正确吗?
- 后修剪(例如减少错误修剪)不是基于测试集。相反,学习者算法在内部分割训练集,并使用其中的一部分进行模型细化。用户对此没有影响。
- 测试集/验证器对模型构建没有影响,但是仅用于度量已经改进的模型的性能。这里的例外是参数优化(以及类似的操作符),它将性能度量作为输入。
会的,我已经考虑过了。RM团队(以及它的社区成员,包括你自己)非常乐于助人、能干、友好,所以它真的很诱人。问题是:我不是在工作时这么做,而是在空闲时间。在工作中,我使用不那么复杂的技术,如SQL脚本、R和Excel来获取我需要的信息。在我的空闲时间,我阅读了关于数据挖掘的知识,并尝试应用我在RapidMiner中学到的知识。特别是,我试图得到比传统技术更好的工作问题的答案。到目前为止,我失败了。没有结果,我的雇主永远不会同意购买企业合同。我们只是一家小公司,并没有太多需要数据挖掘解决方案的问题。不幸的是,作为一个个人,企业版对我来说是遥不可及的。 If I could, I would, that's for sure致以最亲切的问候
专员Hanspeter
我关于UI的图形优势的观点也适用于此。您可以将鼠标移到流上,并将鼠标悬停在输入和输出端口上,以查看正在传递的内容、示例、模型、性能和其他内容。这是检查您是否理解底层流及其序列的一种很好的方法。
我将尝试遵循您的建议,并使用GUI工具来更深入地理解底层流。
致以最亲切的问候
专员Hanspeter