【发布时间】:2013-05-14 09:28:21
【问题描述】:
我有一个二叉决策树。它将输入作为浮点数组,每个分支节点根据输入索引和值拆分,最终将我带到叶子。
我正在这棵树上执行大量查找(根据性能分析,大约占执行时间的 17%(编辑:优化了其他区域,现在几乎是 40%)),我想知道我是否可以/应该使用不同的数据结构来提高查找速度。
不能使用某种哈希表,因为输入不直接映射到叶节点,但我想知道是否有人对我可以用来代替树的方法和数据结构有任何建议(或以及?)以提高查找速度。
内存是一个问题,但比速度更重要。
代码目前是用 C# 编写的,但显然可以应用任何方法。
编辑: 有太多代码要发布,但我会提供有关树的更多详细信息。
树是使用信息增益计算生成的,它并不总是 50/50 分割,分割值可以是任何浮点值。单个输入也可以拆分多次,从而提高该输入的分辨率。
我在这里发布了一个关于迭代器性能的问题:
Micro optimisations iterating through a tree in C#
但我认为我可能需要查看数据结构本身以进一步提高性能。
我的目标是尽可能提高性能。我正在研究一种新的机器学习方法,树使用反馈循环自行生长。对于我正在处理的过程,我估计它会运行几个月,所以这里节省了几个%,而且是巨大的。最终目标是在不占用太多内存的情况下提高速度。
【问题讨论】:
-
可以是地图的排序字典
-
你说你有一棵二叉树,每个节点的输入是一个浮点数 - 你选择的子节点是基于
input < 0.5还是有更复杂的事情发生?你能发布一些代码吗?另外:17% 的执行时间与上下文无关——这可能非常快!您是否有一个目标,或者您可以分享更多关于分析的详细信息? -
感谢 Dan,我添加了有关树和目标的更多详细信息。
-
它有固定的深度吗?
-
浮点数需要什么精度?例如,在 0 和 1 之间只有 256 个刻度就足够了吗?
标签: performance data-structures