有没有一种根据 Jaccard 相似度对图进行聚类的有效方法?
Posted
技术标签:
【中文标题】有没有一种根据 Jaccard 相似度对图进行聚类的有效方法?【英文标题】:Is there an efficient way to cluster a graph according to Jaccard similarity? 【发布时间】:2014-01-09 20:17:22 【问题描述】:有没有一种有效的方法来使用 Jaccard 相似度对图中的节点进行聚类,这样每个聚类至少有 K
节点?
节点i
和j
之间的Jaccard 相似度: 让S
是i
的邻居集,T
是j
的邻居集。那么i
和j
之间的相似度由|(S ⋂ T)| / |(S ⋃ T)|
给出。
【问题讨论】:
图表是用什么格式描述的?如,它是邻接列表、邻接矩阵等吗?图是可靠的稀疏还是密集的?你知道一个节点的度数是如何随着图的增长而变化的吗? (特别是,它是否保持不变?它是否线性增加?) 图被描述为邻接表,应该是稀疏的。 好的。你想要什么样的集群?最大化最小集群内相似度指标的集群?最小化平均集群间相似度指标的集群?等等下一步:你想要绝对最优聚类吗?如果不是,您会接受多差的近似值? 集群内的相似性最大化。尽管可以接受良好的近似算法,但我最好寻找最佳解决方案。 【参考方案1】:您是否尝试过自己实现一些算法?
计算所有成对的非零相似度(即,当它们至少有一个共同的邻居时;这使得候选集比方阵小得多)。
按相似度对它们进行排序,并以递减的相似度处理对。最初,每个对象都是它们自己的集群。
当 A 和 B 尚未在同一个集群中,并且任一集群的成员少于 k 个时,加入这两个集群。重复直到处理完所有相似性。
请注意,您最终可能仍会拥有少于 k 个成员的集群。例如,如果您的数据集的节点总数少于 k,或者有未连接的小子图等。
您确实应该接受少于 k 个节点的集群,即非集群节点。为什么一切都会聚集?真实数据中总会存在异常值和噪声。
【讨论】:
以上是关于有没有一种根据 Jaccard 相似度对图进行聚类的有效方法?的主要内容,如果未能解决你的问题,请参考以下文章
R语言计算杰卡德相似系数(Jaccard Similarity)实战:自定义函数计算Jaccard相似度对字符串向量计算Jaccard相似度将Jaccard相似度转化为Jaccard距离