【问题标题】:alternative similarity measure in DBSCAN?DBSCAN 中的替代相似性度量?
【发布时间】:2013-01-29 00:57:27
【问题描述】:

我在 scikit-learn python 模块中使用 DBSCAN 算法测试我的图像集。相似度计算有多种替代方案:

# Compute similarities
D = distance.squareform(distance.pdist(X))
S = 1 - (D / np.max(D))

我可以尝试加权度量或类似的方法,例如?

【问题讨论】:

    标签: python scikit-learn cluster-analysis data-mining dbscan


    【解决方案1】:

    DBSCAN 存在一个泛化,称为“Generalized DBSCAN”。

    实际上,对于 DBSCAN,您甚至不需要距离。这就是为什么首先计算相似度矩阵实际上没有意义的原因。

    您只需要一个谓词“getNeighbors”,它会计算您认为是邻居的对象。

    请参阅:在 DBSCAN 中,距离并没有真正使用,除了测试对象是否是邻居。所以你所需要的只是这个布尔决定。

    您可以尝试以下方法:用全 1 初始化矩阵。 对于您认为与您的应用程序相似的任何两个对象(在不知道您的应用程序和数据的情况下,我们无法为您提供很多帮助),用 0 填充相应的单元格。 然后以 epsilon = 0.5 运行 DBSCAN,显然 DBSCAN 会将所有的 0 视为邻居。

    【讨论】:

      【解决方案2】:

      您可以使用任何您喜欢的相似度矩阵。它只需要基于一个有效的距离(对称,半正定)。

      【讨论】:

      • 我不知道其他相似度矩阵,有什么例子吗?或列出我在哪里可以选择?
      • 稀疏正向量(例如词频)、热核或 RBF 核之间的余弦相似度,基于 l1(曼哈顿)范数而不是欧几里德范数的相似性...
      • 实际上不,它不需要是有效的距离/度量。 DBSCAN 只需要一个二进制“isNeighbor”信息。从技术上讲,没有对称要求。您可以使用随机矩阵,DBSCAN 仍然可以工作。 (不过,适当距离的结果通常会更好)。 @postgres,您需要弄清楚您的特定任务的“相似之处”!
      • 实际上,DBSCAN 估计器想要的是距离,而不是相似度。
      【解决方案3】:

      我相信 DBSCAN 估计器需要距离而不是相似度。但同样,当涉及到字符串时,它需要一个相似度矩阵,它甚至可以是用于匹配两个字符串之间相等性的一行代码。因此,这取决于您如何使用相似度矩阵以及如何区分相邻对象和非相邻对象。

      【讨论】:

        猜你喜欢
        • 2013-03-25
        • 2018-03-03
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        • 2012-09-30
        • 2015-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多