BallTree现在是否支持使用不规则数据的自定义指标?

时间:2016-03-11 10:16:08

标签: numpy machine-learning scikit-learn

我有一个数据集描述了以下形式的一些痕迹:

E_USER_NOTICE

即,此文件包含多个跟踪。每个跟踪由几个事件和这些事件发生的时间组成。每条迹线的长度可能会有所不同。因此,我无法将数据转换为矩阵。

我写了一个Point类来将每个跟踪保存为一个对象。我还写了一个自定义函数来计算每对跟踪之间的距离。当我尝试使用我的指标构建BallTree时,它会给出:

traceId1: event1 time1 event2 time2 ... eventN timeN
traceId2: event1 time1 event2 time2 ... eventM-1 timeM-1 eventM timeM
.
.
.

基于此post,似乎BallTree只接受可以转换为float的数据类型。由于这是在2013年发布的,现在有没有解决方法?例如,在类定义中编写 float 方法?

PS:我自己可以用Python编写一个BallTree,但它没有经过优化,因此工作缓慢。并且系统限制了递归的最大深度,因此它无法在我的完整数据集上运行。我也用C ++实现了BallTree,用Python调用那个函数是个好主意吗?

1 个答案:

答案 0 :(得分:1)

Ball Tree仅适用于可以形成2D浮点阵列的数据。您可以在对象in the source code的初始化中看到这一点。我预计代码库不会被更改为支持自定义对象数组。

在任何情况下,由于使用的Python回调的限制,自定义距离度量标准将不会非常高效。如果你有其他C ++代码可以解决你的问题,那么将它包装起来用于Python,例如使用它是相对简单的。 cython