Artificial intelligence 相互距离最大的k元素(聚类?)

Artificial intelligence 相互距离最大的k元素(聚类?),artificial-intelligence,machine-learning,cluster-analysis,combinations,k-means,Artificial Intelligence,Machine Learning,Cluster Analysis,Combinations,K Means,我有一个简单的机器学习问题: 我有n(~110)个元素,和一个所有成对距离的矩阵。我想选择相距最远的10个元素。就是我想, Maximize: Choose 10 different elements. Return min distance over (all pairings within the 10). 我的距离度量是对称的,并且尊重三角形不等式 我可以使用什么样的算法?我的第一反应是做以下事情: 将n个元素聚类为20个 集群 将每个集群仅替换为 该集群的元素,即 离平均元素最

我有一个简单的机器学习问题:

我有n(~110)个元素,和一个所有成对距离的矩阵。我想选择相距最远的10个元素。就是我想,

Maximize:
  Choose 10 different elements.
  Return min distance over (all pairings within the 10).
我的距离度量是对称的,并且尊重三角形不等式

我可以使用什么样的算法?我的第一反应是做以下事情:

  • 将n个元素聚类为20个 集群
  • 将每个集群仅替换为 该集群的元素,即 离平均元素最远的 原文
  • 使用蛮力解决问题 剩下的20个问题 候选人。幸运的是,20选择10是正确的 只有184756人

  • 编辑:感谢etarion的深刻评论,将优化问题陈述中的“返回距离之和”更改为“返回最小距离”。

    问题很好

    我不确定是否能以有效的方式准确地解决这个问题,而且您基于集群的解决方案似乎是合理的。另一个研究方向是局部搜索法,如模拟退火法和爬山法

    这里有一个明显的基线,我会将任何其他解决方案与之进行比较:

  • 重复100次:
  • 贪婪地选择删除对目标函数影响最小的数据点并删除它

  • 下面是通过凸松弛来处理这个组合优化问题的方法

    设D为上三角矩阵,距离在上三角上。即,其中I 然后,您的目标是最大化x'*D*x,其中x是二进制值,10个元素设置为1,其余元素设置为0。(将x中的第i个条目设置为1类似于选择第i个元素作为10个元素之一。)

    像这样的组合问题的“标准”凸优化方法是放松约束,使得x不需要离散值。这样做会给我们带来以下问题:

    最大化y'*D*y
    主题:0+1好建议,谢谢!在接受一个答案之前,我会等待一段时间,等待不同的答案。如果分数是3d的。。8d,首先找到凸面外壳(例如,最多8d),并排除外壳内的所有点,以很好地减少问题规模。(证明?)什么是申请?这个问题的原因是,我觉得“距离之和”与“相距最远”不是很接近。我希望最后一行中的“返回所有对的最小距离”这样的内容可以得到“最远距离”的重采样结果。@deni这是一个很好的建议!但你的意思不是找到“凹壳”并排除里面的点吗?(凸面外壳=收缩橡皮筋,defn包括所有点。凹面外壳=扩张气球,最小包围周长。)在这里应用凹面外壳的想法将看起来像carlosdc的贪婪算法:100x,移除与所有剩余点最相似的点。@etarion出色的观察,你的直觉对我的申请是正确的。这是一个合成生物学项目:110个元素是110个可互换的DNA序列,它们都充当“启动子”(见维基百科)。在一个复杂的遗传回路中,需要使用大约10个不同的启动子。诀窍是选择一组具有最小可能的DNA序列同源性的启动子。同源性是不好的,因为同源序列往往会自发地相互连接(“重组”),剪接插入的DNA,从而破坏你的遗传系统;凸面是常用的术语。列出了O(n log h)算法,带有h