我有一个二叉决策树。它将输入作为浮点数数组,并且每个分支节点在输入索引和值上进行拆分,最终将我带到一个叶子节点。
我正在对这棵树执行大量查找操作(根据性能分析约占执行时间的17%(编辑:优化其他区域后现在接近40%)),并且想知道是否可以/应该使用不同的数据结构来提高查找速度。
某种哈希表无法使用,因为输入不能直接映射到叶子节点,但我想知道是否有人对我可以使用的方法和数据结构有任何建议,以代替树(或与之并用)以提高查找速度。
内存是一个问题,但速度的问题比内存更重要。
代码当前是用C#编写的,但显然可以应用任何方法。
编辑: 代码太多了,但我会提供有关树的更多详细信息。
该树是使用信息增益计算生成的,它不总是50/50的拆分,拆分值可以是任何浮点值。单个输入也可以多次拆分,从而增加该输入的分辨率。
我在此处发布了有关迭代器性能的问题:
我正在对这棵树执行大量查找操作(根据性能分析约占执行时间的17%(编辑:优化其他区域后现在接近40%)),并且想知道是否可以/应该使用不同的数据结构来提高查找速度。
某种哈希表无法使用,因为输入不能直接映射到叶子节点,但我想知道是否有人对我可以使用的方法和数据结构有任何建议,以代替树(或与之并用)以提高查找速度。
内存是一个问题,但速度的问题比内存更重要。
代码当前是用C#编写的,但显然可以应用任何方法。
编辑: 代码太多了,但我会提供有关树的更多详细信息。
该树是使用信息增益计算生成的,它不总是50/50的拆分,拆分值可以是任何浮点值。单个输入也可以多次拆分,从而增加该输入的分辨率。
我在此处发布了有关迭代器性能的问题:
但我认为我可能需要查看数据结构本身以进一步提高性能。
我在这里的目标是尽可能地提高性能。我正在研究一种新的机器学习方法,该树使用反馈循环自行生长。对于我正在处理的过程,我估计它将运行数个月,因此每次仅节省几个百分点就非常重要。最终目标是在不使用过多内存的情况下实现速度。
input < 0.5
还是有更复杂的情况?你能发布一些代码吗?此外:17% 的执行时间并不是很具体化 - 这可能非常快!你有一个目标吗,或者有更多关于性能分析的细节可以分享吗? - Dan Puzey