【发布时间】:2012-06-14 01:42:17
【问题描述】:
如何以常规密度选择点的子集?更正式地说,
给定
- 一组 A 不规则间隔的点,
- 距离度量
dist(例如,欧几里得距离), - 和目标密度d,
如何选择满足以下条件的最小子集B?
- 对于 A 中的每个点 x,
- 在B中存在一个点y
- 满足
dist(x,y) <= d
我目前最好的选择是
- 从A本身开始
- 选出最接近(或特别接近)的几个点
- 随机排除其中一个
- 只要条件成立就重复
并重复整个过程以获得好运。但是有更好的方法吗?
我正在尝试使用 280,000 个 18-D 点来执行此操作,但我的问题是总体策略。所以我也想知道如何用二维点来做。而且我真的不需要最小子集的保证。欢迎任何有用的方法。谢谢。
自下而上的方法
- 随机选择一个点
- 在未选中的
y中进行选择,其中min(d(x,y) for x in selected)最大 - 继续前进!
我将其称为自下而上的,我最初发布的自上而下。这在开始时要快得多,所以对于稀疏采样,这应该会更好吗?
绩效衡量
如果不需要保证最优性,我认为这两个指标可能有用:
- 覆盖范围:
max {y in unselected} min(d(x,y) for x in selected) - 经济半径:
min {y in selected != x} min(d(x,y) for x in selected)
RC 是允许的最小值d,这两者之间没有绝对的不平等。但RC <= RE 更可取。
我的小方法
为了稍微演示一下“性能测量”,我生成了 256 个二维点,这些点均匀分布或按标准正态分布分布。然后我用他们尝试了我的自上而下和自下而上的方法。这就是我得到的:
RC 是红色,RE 是蓝色。 X 轴是选定点的数量。你认为自下而上可以一样好吗?我是这么看动画的,但似乎自上而下的效果要好得多(看看稀疏区域)。不过,考虑到它要快得多,也不算太可怕。
这里我把所有东西都打包好了。
http://www.filehosting.org/file/details/352267/density_sampling.tar.gz
【问题讨论】:
-
我看不出您的方法如何满足您提供的代码中所述的条件 (
for every x in A there is an y in B such that dist(x, y) < d)。我也找不到您正在使用的 pythonh2包。 -
我的小方法是倒退——它创建对some d有效的选择。抱歉,
h2是我收集的可重用代码块……我不知道我使用了它。
标签: algorithm geometry selection subset sampling