使用sklearn DBSCAN得到不是很相似的簇正常吗?
Is it normal to get a cluster that is not very similar when using sklearn DBSCAN?
我尝试根据相似性对大量诊断代码序列进行聚类。我通过使用最不常见子序列算法计算相似度然后从 1 中减去该相似度来找到每个序列之间的距离来创建距离矩阵。
然后我将该距离矩阵传递给 sklearn 的 DBSCAN:
db = DBSCAN(eps=0.34, metric='precomputed')
db.fit(sim_mat)
创建簇后,我将每个簇中包含的序列输出到一个文本文件中。除了一个之外,每个集群对我来说都是有意义的。例如,这个集群对我来说很有意义,因为每个序列都有两个相同顺序的代码:
['345.3', '345.11']['345.3', '345.11', '038.9', '038.0', '276.51']['345.3', '345.11']['322.9', '345.3', '345.11']
然而,这个簇(这里缩短了,因为它包含 2852 个序列)对我来说没有意义,因为 none 个序列有任何共同的代码:
['162.3', '038.9']['578.1', '584.9']['416.8', '486', '486', '038.11']['493.92', '428.0', '584.9', '427.89']['414.01', '998.59']
我的问题是这是否是 DBSCAN 中的错误,或者我是否误解了如何使用它 and/or 它应该如何工作。此外,如果这是一个错误或算法的预期输出,我是否应该考虑使用另一种算法?
我明白了。根据 DBSCAN 的描述,https://en.wikipedia.org/wiki/DBSCAN,似乎这种行为是正常的。本质上,该算法从一个项目开始,在所需距离内找到它的邻居,然后继续为该集群中的每个点寻找邻居。因此,您最终可能会得到一个集群,其中的点实际上彼此相距很远。
为了解决这个问题,我选择使用亲和力传播 - https://en.wikipedia.org/wiki/Affinity_propagation
根据设计(DBSCAN 中的字母 N),该算法还可以识别 不 属于任何集群的对象,称为 噪声.
如果您错误地将 "noise" 视为一个集群,它们当然会显得完全无关。
有些样本通常不适合 任何 集群,因此这是一个功能,而不是限制。您可以将每个点分配给与最近的聚类点相同的聚类,但这不会提高聚类质量。
我尝试根据相似性对大量诊断代码序列进行聚类。我通过使用最不常见子序列算法计算相似度然后从 1 中减去该相似度来找到每个序列之间的距离来创建距离矩阵。
然后我将该距离矩阵传递给 sklearn 的 DBSCAN:
db = DBSCAN(eps=0.34, metric='precomputed')
db.fit(sim_mat)
创建簇后,我将每个簇中包含的序列输出到一个文本文件中。除了一个之外,每个集群对我来说都是有意义的。例如,这个集群对我来说很有意义,因为每个序列都有两个相同顺序的代码:
['345.3', '345.11']['345.3', '345.11', '038.9', '038.0', '276.51']['345.3', '345.11']['322.9', '345.3', '345.11']
然而,这个簇(这里缩短了,因为它包含 2852 个序列)对我来说没有意义,因为 none 个序列有任何共同的代码:
['162.3', '038.9']['578.1', '584.9']['416.8', '486', '486', '038.11']['493.92', '428.0', '584.9', '427.89']['414.01', '998.59']
我的问题是这是否是 DBSCAN 中的错误,或者我是否误解了如何使用它 and/or 它应该如何工作。此外,如果这是一个错误或算法的预期输出,我是否应该考虑使用另一种算法?
我明白了。根据 DBSCAN 的描述,https://en.wikipedia.org/wiki/DBSCAN,似乎这种行为是正常的。本质上,该算法从一个项目开始,在所需距离内找到它的邻居,然后继续为该集群中的每个点寻找邻居。因此,您最终可能会得到一个集群,其中的点实际上彼此相距很远。
为了解决这个问题,我选择使用亲和力传播 - https://en.wikipedia.org/wiki/Affinity_propagation
根据设计(DBSCAN 中的字母 N),该算法还可以识别 不 属于任何集群的对象,称为 噪声.
如果您错误地将 "noise" 视为一个集群,它们当然会显得完全无关。
有些样本通常不适合 任何 集群,因此这是一个功能,而不是限制。您可以将每个点分配给与最近的聚类点相同的聚类,但这不会提高聚类质量。