Artificial intelligence 建立决策树时的终止条件

Artificial intelligence 建立决策树时的终止条件,artificial-intelligence,machine-learning,decision-tree,classification,Artificial Intelligence,Machine Learning,Decision Tree,Classification,我正在为决策树编写自己的代码。我需要决定何时终止树构建过程。我可以考虑限制树的高度,但这似乎微不足道。谁能给我一个更好的主意,如何实现我的终止功能 这里是我的树构建算法。在你的问题中没有什么上下文,但我假设你正在从一大组数据构建一棵树?在这种情况下,除了LearnSet之外,还需要一个解决方案来获取一组停止集示例,并定期在此停止集上验证您的决策过程。如果质量下降,这表明您在LearnSet上训练过度 我故意使用StopSet而不是TestSet,因为在此之后,您应该在测试集上应用您的决策树来评估

我正在为决策树编写自己的代码。我需要决定何时终止树构建过程。我可以考虑限制树的高度,但这似乎微不足道。谁能给我一个更好的主意,如何实现我的终止功能


这里是我的树构建算法。

在你的问题中没有什么上下文,但我假设你正在从一大组数据构建一棵树?在这种情况下,除了LearnSet之外,还需要一个解决方案来获取一组停止集示例,并定期在此停止集上验证您的决策过程。如果质量下降,这表明您在LearnSet上训练过度


我故意使用StopSet而不是TestSet,因为在此之后,您应该在测试集上应用您的决策树来评估真正的质量。

您的问题中没有什么上下文,但我假设您正在从大量数据构建一棵树?在这种情况下,除了LearnSet之外,还需要一个解决方案来获取一组停止集示例,并定期在此停止集上验证您的决策过程。如果质量下降,这表明您在LearnSet上训练过度


我故意使用StopSet而不是TestSet,因为在此之后,您应该在测试集上应用决策树来评估真正的质量。

由于决策树产生不平衡的拆分,树的一部分可能比另一部分重。因此,使用树的高度是不明智的,因为树的高度在同一水平的任何地方都会停止。更好的方法是使用分割搜索所需的最少观察次数。这一点在

中更为详细,因为决策树会产生不平衡的拆分,树的一部分可能比另一部分重。因此,使用树的高度是不明智的,因为树的高度在同一水平的任何地方都会停止。更好的方法是使用分割搜索所需的最少观察次数。这是一个有点老的问题,但我想我可以改进答案。理论上,当拆分为纯ie杂质=0或左或右节点中的所有成员都是相同的输出值时,停止。例如,如果您正试图预测心脏病发作与否,并且在给定的分组中,如果一个组有所有心脏病发作或没有心脏病发作,那么您可以安全地停止该组的分组,因为一切都是相同的,并且您可以安全地预测该公共值。修剪过程支持这一理论,因为你可以构建一棵非常高的树,如果一个节点不能提高精度,它就会被修剪

现在你很少能得到完全的分裂。通常,为了将数据分割成完全纯的数据集,你会将大量数据分割成越来越小的数据集,直到你在每个节点上得到一个观测值。高大的树木通常无法在修剪过程中存活下来,无论如何,你很可能过度拟合了训练数据。因此,通常的做法是在剪枝算法中为自己节省额外的时间,以简单地限制您愿意拆分的观察值的数量,并将结果拆分的数量设置为最小值。您不会保留导致1和999个观察结果的分割。这是一个糟糕的分裂,再试一次

因此,您添加了一个配置参数,用于在节点(即拆分后)中观察到的最小数量,以及拆分前拆分所需的可由用户调整的最小节点数量

最后的标准也是,如果你的分裂没有改善从最后一次测量的纯度。如果一个节点不能被分割成一个比以前更纯的集合。你可以停下来,因为你走错了方向。这本质上意味着,如果是要拆分的节点的纯度度量。Is[l]是左分割集的纯度,Is[r]是右分割集的纯度,ps是该集到父集的部分,然后:

Gain = I(s) - p(s[r]) * I(s[r]) - p(s[l]) * I(s[l])

如果这个值小于0,你就停止,因为你不能通过拆分它来获得纯度。

这是一个有点老的问题,但我认为我可以改进答案。理论上,当拆分为纯ie杂质=0或左或右节点中的所有成员都是相同的输出值时,停止。例如,如果您正试图预测心脏病发作与否,并且在给定的分组中,如果一个组有所有心脏病发作或没有心脏病发作,那么您可以安全地停止该组的分组,因为一切都是相同的,并且您可以安全地预测该公共值。修剪过程支持这一理论,因为你可以构建一棵非常高的树,如果一个节点不能提高精度,它就会被修剪

现在你很少能得到完全的分裂。通常,为了将数据分割成完全纯的数据集,你会将大量数据分割成越来越小的数据集,直到你在每个节点上得到一个观测值。高大的树木通常无法在修剪过程中存活下来,而你比我更强壮 不管怎样,我还是过度拟合了训练数据。因此,通常的做法是在剪枝算法中为自己节省额外的时间,以简单地限制您愿意拆分的观察值的数量,并将结果拆分的数量设置为最小值。您不会保留导致1和999个观察结果的分割。这是一个糟糕的分裂,再试一次

因此,您添加了一个配置参数,用于在节点(即拆分后)中观察到的最小数量,以及拆分前拆分所需的可由用户调整的最小节点数量

最后的标准也是,如果你的分裂没有改善从最后一次测量的纯度。如果一个节点不能被分割成一个比以前更纯的集合。你可以停下来,因为你走错了方向。这本质上意味着,如果是要拆分的节点的纯度度量。Is[l]是左分割集的纯度,Is[r]是右分割集的纯度,ps是该集到父集的部分,然后:

Gain = I(s) - p(s[r]) * I(s[r]) - p(s[l]) * I(s[l])

如果该值小于0,则停止,因为通过拆分它无法获得更多纯度。

我们有3个一般终止条件: 1.分区中的所有元组都属于同一个类 2.没有可以进一步划分元组的剩余属性。 3.给定分支没有元组


当然,您也可以设置一些其他条件,如最大深度或其他条件。

我们有3个通用终止条件: 1.分区中的所有元组都属于同一个类 2.没有可以进一步划分元组的剩余属性。 3.给定分支没有元组


当然,你也可以设定一些其他条件,如最大深度或其他条件。

如果质量下降,这表明你在学习集上训练过度:虽然这是事实,但很可能意味着决策树训练不够。这让我们回到了行动问题…@Eugen Constantin Dinca:我的意思是,在训练期间,你会看到停止集上的分数增加,这是用正确分类的数据项的数量来衡量的。在某个时间点,你会看到这个分数下降:即你开始在LearnSet上过度训练,应该停止训练。如果质量下降,这表明你在LearnSet上过度训练:虽然这是事实,但很可能意味着决策树没有得到足够的训练。这让我们回到了行动问题…@Eugen Constantin Dinca:我的意思是,在训练期间,你会看到停止集上的分数增加,这是用正确分类的数据项的数量来衡量的。在某个时间点,你会看到这个分数下降:那就是当你开始在LearnSet上过度训练时,应该停止训练。你是否尝试过RMSE进行回归或错误分类进行分类?还没有,你能详细介绍一下回归吗?请我有一个新的想法,关于跟踪信息获取情况如何,如果信息增益很低,那么我们就可以停止构建树了?1关于回归部分:参见这里2基于1,您正在实现什么样的决策树?3如果没有@和用户名,您的邮件可能会丢失请下次使用更具体的标记。你的问题更多的是关于机器学习而不是数据挖掘;甚至还有一个问题,你是否尝试过RMSE进行回归或错误分类进行分类?还没有,你能详细阐述一下回归吗?请我有一个新想法,如果信息增益很低,跟踪信息增益如何,那么我们就可以停止构建树了吗?1关于回归部分:参见这里2基于1,您正在实现什么样的决策树?3如果没有@和用户名,您的邮件可能会丢失请下次使用更具体的标记。你的问题更多的是关于机器学习而不是数据挖掘;甚至还有一个