【发布时间】:2011-07-21 00:43:43
【问题描述】:
我有一个简单的机器学习问题:
我有 n (~110) 个元素,以及所有成对距离的矩阵。我想选择相距最远的10个元素。也就是说,我想
Maximize:
Choose 10 different elements.
Return min distance over (all pairings within the 10).
我的距离度量是对称的并且尊重三角不等式。
我可以使用哪种算法?我的第一直觉是做以下事情:
- 将 n 个元素聚类为 20 集群。
- 仅将每个集群替换为 该集群的元素是 离平均元素最远 原名。
- 使用蛮力解决 剩下的20个问题 候选人。幸运的是,20选10是 只有 184,756 个。
编辑:感谢 etarion 富有洞察力的评论,在优化问题陈述中将“返回总和(距离)”更改为“返回最小距离”。
【问题讨论】:
-
如果点在 3d .. 8d 中,首先找到凸包 - 参见例如qhull 最多 8d - 并排除船体内的所有点,以便很好地减少问题大小。 (证明?)
-
应用程序是什么?问题的原因是,我觉得“距离总和”与“最远距离”不是很接近。我希望最后一行中的“返回所有对的最小距离”之类的内容类似于“相距最远”的内容。
-
@Denis 很棒的建议!但是你不是说找到“凹壳”并排除里面的点吗? (凸壳 = 收缩的橡皮筋,定义包括所有点。凹壳 = 膨胀的气球,最小边界。)在这里应用凹壳的想法看起来像 carlosdc 的贪心算法:100x,删除与所有点最相似的点剩下的。
-
@etarion 出色的观察力,你的直觉对我的应用是正确的。这是一个合成生物学项目:110 个元素是 110 个可互换的 DNA 序列,它们都充当“启动子”(参见 Wikipedia)。在一个复杂的遗传回路中,需要使用大约 10 种不同的启动子。诀窍是选择一组具有最小可能 DNA 序列同源性的启动子。同源性是不好的,因为同源序列往往会自发地相互连接(“重组”),拼接出中间的 DNA,从而破坏你的遗传系统。
-
我认为我们的意思是一样的;凸是通常的术语。 Convex hull algorithms 列出了 O(n log h) 算法,其中 h
标签: artificial-intelligence machine-learning cluster-analysis combinations k-means