numpy - BallTree现在支持不规则数据的自定义指标吗?

标签 numpy machine-learning scikit-learn

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

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

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

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

  File "/home/yangzhao/anaconda3/lib/python3.5/site-packages/numpy/core/numeric.py", line 474, in asarray
    return array(a, dtype, copy=False, order=order)

TypeError: float() argument must be a string or a number, not 'Point'

基于此post ,看来 BallTree 只接受可以转换为 float 的数据类型。由于这是2013年发布的,现在有解决办法吗?比如在类定义中写一个float方法?

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

最佳答案

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

无论如何,由于所使用的 Python 回调的限制,自定义距离度量的性能不会很高。如果您有其他适用于您的问题的 C++ 代码,则将其包装起来以便在 Python 中使用相对简单,例如使用cython .

关于numpy - BallTree现在支持不规则数据的自定义指标吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35937456/

相关文章:

python - 在多个分类器上进行网格搜索

python - 在Python中求解对答案有约束的矩阵方程

c++ - 关于机器学习/计算机视觉领域实用方法的问题

python - 具有多维(或非标量)输出的 Scipy 过滤器

python - Keras中如何实现RBF激活函数?

机器学习概述

python - 导入错误 : No module named grid_search, learning_curve

python - 如何在sklearn中获得一个非混洗的train_test_split

python - Numpy,沿数组维度应用函数列表

python - 将 numpy 切片重新拼凑成原始数组