基于最高相似性的聚类元素

时间:2016-01-13 10:09:19

标签: algorithm docker cluster-analysis similarity

我正在处理Docker图像,其中包含一组可重复使用的图层。现在给出一组图像,我想组合具有大量共享图层的图像。

更确切地说:给定N个图像的集合,我想创建集群,其中集群中的所有图像彼此共享超过X%的服务。每个图像只允许属于一个群集。

我自己的研究指向了聚类算法的方向,我使用相似性度量来决定哪些图像属于一个聚类。我知道如何写的相似性度量。但是,我很难找到准确的算法或伪算法来开始。

有人可以推荐一种算法来解决这个问题或提供伪代码吗?

编辑:经过一些搜索后,我相信我正在寻找类似这种层次聚类(https://github.com/lbehnke/hierarchical-clustering-java)的东西但是有一个阈值X,这样相似度低于X%的邻居就不会得到合并并留在一个单独的集群中。

2 个答案:

答案 0 :(得分:0)

我相信您是开发人员而且您没有数据科学经验?

有许多聚类算法,它们各有优缺点(请参考https://en.wikipedia.org/wiki/Cluster_analysis),但我认为解决问题的方法比人们想象的要容易。

我假设N足够小,所以你可以在RAM内存中存储N ^ 2个浮点值的矩阵?如果是这种情况,那么你处境非常舒适。您写道,您知道如何实现相似性度量,因此只需计算所有N ^ 2对的度量并将其存储在矩阵中(它是对称矩阵,因此只能存储一半)。请确保您的相似性度量为图像对赋予特殊值,其中相似性度量小于某个X%,如0或无穷大(这取决于您将某个函数视为相似性度量或类似距离)。我认为完美的解决方案是为对分配1,其中相似度大于X%阈值,否则为0。

之后,善待就像一张图。获得第一个顶点并进行例如深度优先搜索或任何其他图形遍历例程。这是你的第一个集群。之后首先不访问顶点并重复图形行走。当然,您可以将图形存储为邻接列表以节省内存。

该算法假设您真的不注意图像相似多少以及哪些图像与其他图像更相似,但是如果它们足够相似(相似性度量大于给定阈值)。

不幸的是,在聚类分析中,通常需要计算100%的可能对。可以使用一些奇特的数据结构来保存一定数量的距离调用以进行k近邻搜索,但是你必须确保你的相似性度量保持三角不等式。

如果您对此答案不满意,请详细说明您的问题并阅读:

K-means(主要缺点:您必须指定群集数量)

分层聚类(计算时间慢,顶部所有图像都在一个簇中,你必须在适当的距离处剪切树形图)

光谱聚类(对于图形,但我认为这对于这个简单的问题来说太复杂了)

答案 1 :(得分:0)

我最终通过使用分层聚类解决问题,然后从上到下遍历树形图的每个分支,直到找到距离低于阈值的聚类。最坏的情况是没有这样的集群,但是我会在树形图的一个叶子中结束,这意味着元素属于它自己的集群。