【问题标题】:Building a k-d tree using MapReduce?使用 MapReduce 构建 k-d 树?
【发布时间】:2012-06-12 07:01:25
【问题描述】:

我正在尝试为图像特征构建 KD 树(独立)。我已经提取了图像特征,该特征包含假设 1000 个浮点值。

使用map-reduce根据分类(例如,猫,狗,枪)在集群的节点之间分配图像,即。每个节点将包含一堆相似的图像,然后在每个节点上构建图像的 KD 树。我对如何构建树感到困惑。

那么如何使用 map-reduce 构建 KD 树呢?每个节点都将包含树,对吗?分发图像的逻辑是什么?在构建 KD-tree 时,我应该在什么基础上在树中添加图像特征向量(即左子或右子)?

任何帮助表示赞赏。在此先感谢。

【问题讨论】:

  • 不确定我是否完全按照您的描述进行操作。您确定需要为此任务使用 map-reduce/hadoop 吗?如果您想要非常精细地控制哪些数据进入哪个节点,则某种分片机制可能会更好。此外,您必须使您的 kd 树可查询并从 HDFS 提供数据,这听起来并不有趣。
  • 嘿,谢谢....看,我要做的是,我有大量的图像,并且我已经提取了图像的特征。每个向量包含 1000 个浮点值。那么我应该如何根据这些值构建 kd 树,以便在搜索过程中帮助我。我需要使用 map-reduce 将相似的图像集分配给节点,这意味着在节点之间分配图像。我怎么能做到这一点?
  • 您是否在 mapreduce 组件之前根据相似性对图像进行分类?所以你在 mapreduce 组件之前就知道哪些图像应该组合在一起。
  • 是的....图像已分类...我只需要在节点之间分配图像并构建 kd 树。
  • @GirishRao...但是如何在每个节点上构建树?什么逻辑可以用来决定左孩子还是右孩子?

标签: java hadoop mapreduce kdtree


【解决方案1】:

我认为 k-d-tree 不适合您的数据。以下是Wikipedia 对此的评价:

k-d 树不适合在高维空间中有效地找到最近邻。作为一般规则,如果维度为 k,则数据中的点数 N 应为 N >> 2^k。否则,当k-d树用于高维数据时,树中的大部分点都会被评估,效率并不比穷举搜索好,而应该使用近似最近邻方法。

您的特征向量的维度为 1000,这意味着您应该有大约 10^300 张图像,这不太可能。

我建议你看一下Locality-sensitive hashing,这是上面提到的用于高维数据的近似最近邻搜索之一。

由于 Wikipedia 并不总是学习复杂事物的最佳场所,我建议您改为查看 ETH Zurich 的 Data Mining 课程的 respective lecture slides。恰好我在本学期学习这门课程。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2017-07-06
  • 2013-03-16
  • 2012-11-10
  • 2016-09-05
相关资源
最近更新 更多