“帮助理解交叉验证和决策树”

spitfire_chspitfire_ch 成员职位:38大师
2019年5月编辑 帮助
你好,

我确实在理解决策树算法与交叉验证相结合的工作方式方面存在一些问题。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

答案

  • spitfire_chspitfire_ch 成员职位:38大师
    很抱歉碰到了这个问题,但这个话题对我来说仍然不是很清楚。RapidMiner决策树算法如何处理验证?据我所知,数据集被分成训练集和一个测试集(用于测量性能。训练集本身又被分成培训记录验证记录.后者将用于通过后修剪进行模型改进,例如通过减少误差修剪方法。

    如何在RapidMiner中选择验证记录?它们是从训练集中自动选择的吗?验证方法(如x验证)完全不影响修剪后步骤的假设是否正确?是否有可能影响培训记录与验证记录的比例?

    在构建“最终模型”时建议采取哪些步骤?
    首先通过x验证等方法找到最合适的算法和参数。
    然后用这个算法和参数对整个可用的数据建立最终的模型?

    非常感谢你提供的一些见解。

  • 黑线鳕黑线鳕 成员职位:849Maven
    你好,

    文本有时并不是解释的媒介,所以我建议你从包含验证的众多示例中挑选一个,然后用你面前的图形表示提出问题。
    RapidMiner决策树算法如何处理验证?
    它们不这样做,它们从验证器获得示例,验证器在其他示例上使用它们生成的模型。
    据我所知,数据集分为训练集和测试集(用于测量性能)。
    是的,通过验证器。
    训练集本身再次分为训练记录和验证记录。后者将用于通过后修剪进行模型改进,例如通过减少误差修剪方法。
    这是不正确的验证器进一步划分训练集。学习器可以进一步划分训练示例以生成模型,但这是内部的,不会改变验证器完成的示例分割。
    如何在RapidMiner中选择验证记录?
    验证器选择测试示例。RapidMiner中有几个验证器,每个用于不同的场景,每个都有不同的选择方法和参数…
    验证方法(如x验证)完全不影响修剪后步骤的假设是否正确?
    是的。这就是图片的来源,看看输入学习者它只是训练样本集。
    是否有可能影响培训记录与验证记录的比例?
    在不同的验证器和它们的参数下…
    在构建“最终模型”时建议采取哪些步骤?
    首先通过x验证等方法找到最合适的算法和参数。
    然后用这个算法和参数对整个可用的数据建立最终的模型?
    验证和参数优化只是构建应用程序所需的几个构建块中的两个,您提到的应用程序属于邮件发送的商业领域。在商业基础上联系RM是否没有意义,无论是培训还是咨询,时间就是金钱等等?就是2c。


  • spitfire_chspitfire_ch 成员职位:38大师
    嗨黑线鳕

    非常感谢您详尽的回答!

    使用测试数据集进行验证以获得性能度量的原则对我来说非常清楚。我不确定的是模型细化是如何完成的。例如,对于后修剪需要来自训练集的验证记录,而不是测试集。然后使用测试集来获得最终模型在细化后的性能。至少杜洪波在《数据挖掘技术与应用》中是这样描述的。因此,由于您不能定义验证记录,而只能定义测试集,因此我不了解Rapidminer中的后修剪如何工作。Rapidminer是否为此使用测试集?这是否意味着,如果不选择验证器,就不能进行任何后剪枝?还是像你说的那样
    这是不正确的验证器进一步划分训练集。学习器可以进一步划分训练示例以生成模型,但这是内部的,不会改变验证器完成的示例分割。
    基本上,下面的假设正确吗?
    • 后修剪(例如减少错误修剪)不是基于测试集。相反,学习者算法在内部分割训练集,并使用其中的一部分进行模型细化。用户对此没有影响。
    • 测试集/验证器对模型构建没有影响,但是仅用于度量已经改进的模型的性能。这里的例外是参数优化(以及类似的操作符),它将性能度量作为输入。
    在商业基础上联系RM是否没有意义,无论是培训还是咨询,时间就是金钱等等?就是2c。
    会的,我已经考虑过了。RM团队(以及它的社区成员,包括你自己)非常乐于助人、能干、友好,所以它真的很诱人。问题是:我不是在工作时这么做,而是在空闲时间。在工作中,我使用不那么复杂的技术,如SQL脚本、R和Excel来获取我需要的信息。在我的空闲时间,我阅读了关于数据挖掘的知识,并尝试应用我在RapidMiner中学到的知识。特别是,我试图得到比传统技术更好的工作问题的答案。到目前为止,我失败了。没有结果,我的雇主永远不会同意购买企业合同。我们只是一家小公司,并没有太多需要数据挖掘解决方案的问题。不幸的是,作为一个个人,企业版对我来说是遥不可及的。 If I could, I would, that's for sure:)

    致以最亲切的问候
    专员Hanspeter

  • 黑线鳕黑线鳕 成员职位:849Maven
    你好,
    我不明白如何在Rapidminer后修剪工作
    修剪是由学习者无论这个学习器是在一个优化的验证双循环中,还是简单的,就像这个例子一样。
    < ?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <过程version = " 5.1.001 " >
    > <上下文
    <输入/ >
    <输出/ >
    <宏/ >
    > < /上下文

    <table><tr><td>< >这个过程从加载数据开始。完成输入运算符后,执行典型的学习步骤。这里使用了一个决策树学习器的实现,它也可以处理数值(类似于众所周知的C4.5算法)。</p></td><td><icon>groups/24/learner</icon></td></tr></table>< <p>每个运算符可能需要一些输入并提供一些输出。这些输入和输出类型在操作符之间传递。在本例中,第一个操作符&;Input&;不需要输入,并提供一个示例集作为输出。这个示例集由学习者使用,并提供最终输出:学习模型。</p><p>由于这是一个线性数据流,这样的过程设计被称为“操作符链”。稍后,我们将以操作符树的形式看到更复杂的过程。</p><p>试试下面的操作:</p><ul><在框架顶部的图标栏中的图标。 The process should start and after a short time the message viewer in the bottom part of the frame shows the message that the process was successfully finished. The main frame changes to &quot;Result&quot; view which shows the learned decision tree (a hypothesis which is called Model in RapidMiner). <table><tr><td><icon>24/media_play</icon></td><td><i>&quot;Play&quot; button to start the process</td></tr></table></li><li>Change back to the edit mode (either via the View menu entry, via the icon in the upper right corner, or via the shortcut F9). Replace the learner by another learning scheme for classification tasks (right click on decision tree learner and replace operator). You can use the RuleLearner for example. After running the changed process the new model is presented.<table><tr><td><icon>groups/24/learner</icon></td><td><i>Replace the decision tree learner by a RuleLearner.</i></td></tr></table></li></ul>



    < /操作符>






    > < /过程
    < /操作符>
    > < /过程
    我关于UI的图形优势的观点也适用于此。您可以将鼠标移到流上,并将鼠标悬停在输入和输出端口上,以查看正在传递的内容、示例、模型、性能和其他内容。这是检查您是否理解底层流及其序列的一种很好的方法。


  • spitfire_chspitfire_ch 成员职位:38大师
    好的,谢谢你的解释。所以,假设是正确的。

    我将尝试遵循您的建议,并使用GUI工具来更深入地理解底层流。

    致以最亲切的问候
    专员Hanspeter
登录注册置评。