问题标签 [pruning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JAVA:修剪决策树
我正在编写一个应该修剪决策树的函数。该函数应删除树中“实例数组长度”小于给定输入长度的任何节点(此决策树包含保存值数组的节点)。我的问题(我认为)是将节点引用传递给此方法,然后将 null 分配给函数内的任何节点不会全局删除这些节点。它只是删除了本地引用。这是我写的代码:
如何以不同的方式编写此代码,以便将任何实例数组长度小于输入长度 l 的节点从树中完全删除?
编辑 这是节点类的标题。似乎相关信息:
python-2.7 - Python Dictionary - 将叶节点合并到阈值以下
dict()
下面是我在 Python 中训练的决策树 ( ) 的简化示例:
叶节点(框)中的数字表示类标签(例如,TRUE)出现在该节点中的概率。从视觉上看,树看起来像这样:
我正在尝试编写一个通用的后修剪算法,该算法将值小于0.3
其父节点的节点合并。因此,具有0.3
阈值的生成树在绘制时将如下所示:
在第二个图中,请注意Income
节点 atAge<18
现在已合并到根节点Age
。并且 由于其所有叶节点(在多个级别)的总和小于 0.3 ,Age=36-55, Marital_Staus
因此已合并到。Age
这是我想出的不完整的伪代码(到目前为止):
想发布这个问题,因为我觉得这应该已经解决了很多次。
谢谢你。
PS:我不打算将最终结果用于分类,因此以这种方式(从外观上)修剪是可行的。
sql - 在条件下进行 oracle 强制分区修剪
我有一个表,其中两列上的分区列表按 MY_ID(值为 1、2、3、5、8...1100 的整数)、RUN_DATE(过去几天)的顺序排列。
我的查询是
它将进行全表扫描,并带有以下解释计划。
如何强制它仅访问某些分区而不是进行全表扫描?
抱歉,我对 Oracle 提示不太熟悉,之前找不到具体问题。
python - 回溯/搜索修剪——Python 中的组合词搜索
我正在尝试创建一个程序,该程序将在“条目”中搜索属于“目标”列表成员的词块。我想保留这些子集中的词序。
这就是我到目前为止所拥有的。我不确定如何完成此操作,或者我是否以正确的方式接近它。
到目前为止的输出是这样的:
期望的输出:
我一直在努力寻找合适的算法,我认为它需要回溯或搜索修剪,我不太确定。理想情况下,解决方案适用于任何“条目”和“目标”列表。任何意见都非常感谢。
python - 黑客/克隆 sklearn 以支持修剪决策树?
我想创建一个决策树,然后在 python 中修剪它。但是,sklearn 本身不支持剪枝。通过互联网搜索,我发现了这个: https ://github.com/sgenoud/scikit-learn/blob/4a75a4aaebd45e864e28cfca897121d1199e41d9/sklearn/tree/tree.py
但我不知道如何使用该文件。我试过了:
但我收到错误 ValueError: Attempted relative import in non-package. 这不是我导入的方式吗?我需要以其他方式保存文件吗?谢谢你。
algorithm - 了解 Minimax 的 Alpha-Beta 修剪版本
我目前正在处理我的第一个 C++ 项目,并选择使用基于Minimax的 AI 编写 Connect Four(又名得分 4) ,更具体地说,使用 Alpha Beta Pruning 方法。
到目前为止,我了解到 AB 修剪包含一个递归算法,该算法将参数 alpha 和 beta 纳入其中,这是您在游戏树中不会寻找的“限制”。此外,我们定义了一个最大化和最小化玩家,前者是第一个开始玩游戏的玩家。最后,还有一个“深度”,我理解为游戏的“难度级别”,AI越深入,它对动作的预测就越好;因此计算机赢得比赛的机会就越大。
但是,我的问题如下。假设在某个时刻,计算机注意到它的对手(人类玩家)有 3 连胜并且距离获胜仅一步之遥。因此,我的启发式函数应该返回 -infinity 以使 AI 了解“迫在眉睫的危险”并使其发挥作用以防止人类玩家获胜:因此递归停止。
但这里有一个问题:当递归停止时,算法会回到游戏的前几层(“较浅的深度级别”),在那里,第一个玩家max(alpha, alphabeta(depth - 1))
和第二个玩家将交替阅读min (beta, alphabeta(depth - 1))
。这意味着 -infinity 分数必然会在某个时候丢失,因此 AI 可能永远不会明白游戏输了。
有人可以向我解释一下我对这个算法的理解哪里错了吗?可以在Wikipedia上找到伪代码的一个版本。
首先十分感谢 !
c++ - 最小平均重量循环 - 直观的解释
在有向图中,我们正在寻找具有最低平均边权重的循环。例如,具有节点 1 和 2 的图具有从 1 到 2 的长度为 2 和从 2 到 1 的长度为 4 的路径的最小平均循环为 3。
不是在寻找一个复杂的方法(Karp),而是一个简单的回溯与修剪解决方案。给出的解释是“当当前运行平均值大于最佳找到的平均重量循环成本时,可通过重要修剪进行回溯求解”。
但是,为什么这种方法有效?如果我们在一个周期的中途并且权重超过了找到的最佳均值,那么是否有可能通过小的权重边缘我们可以达到我们当前周期可能低于最佳找到的均值的情况?
编辑:这是一个示例问题:http ://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2031
mysql - 我是否必须删除主键或重新加载表数据以在 MySQL InnoDB 中进行分区?
我必须按日期范围划分几个表。我是否必须删除主表或重新加载完整数据才能对这些表进行分区?
有些表确实包含超过 5000 万行。
这是我正在使用的脚本。
neo4j - 当不再满足 reduce() 上的条件时停止 Cypher 遍历
假设我有一个具有单一节点类型和单一关系类型的 neo4j 数据库,以保持简单。所有关系都有一个“成本”属性(如在经典图问题中),其值为非负数。
假设现在我想找到 ID A 的节点和 ID B 的节点之间的所有可能路径,路径长度的上限(例如 10)使得总路径成本低于或等于给定常数(例如 20) .
完成此操作的 Cypher 代码如下(并且有效):
这个查询的问题是它没有利用成本是非负的这一事实,因此可以修剪通过总成本限制的路径。相反,它列出了节点 A 和 B 之间长度为 0 到 10 的所有可能路径(这可能非常昂贵),计算总成本,然后过滤掉超出限制的路径。及时修剪路径将导致巨大的性能改进。
我知道通过使用 BranchStates 并在相关时防止扩展,这对于遍历框架是可行的,但我想找到一个 Cypher 解决方案(主要是由于这里公开的原因)。
我目前使用的是 2.2.2 版,如果这很重要的话。
python - 随机森林修剪
我有 sklearn 随机森林回归器。它非常重,1.6 GB,并且在预测值时工作很长时间。
我想修剪它以使其更轻。据我所知,对决策树和森林没有实施修剪。我自己无法实现它,因为树代码是用 C 编写的,我不知道。
有谁知道解决方案?