【问题标题】:Clustering words based on Distance Matrix基于距离矩阵的词聚类
【发布时间】:2013-04-21 04:42:24
【问题描述】:

我的目标是根据单词与文本文档语料库的相似程度对单词进行聚类。我计算了每对单词之间的 Jaccard 相似度。换句话说,我有一个稀疏距离矩阵可用。谁能指出任何将距离矩阵作为输入的聚类算法(可能还有它在 Python 中的库)?我事先也不知道集群的数量。我只想对这些单词进行聚类,并获得哪些单词被聚类在一起。

【问题讨论】:

  • 看看code.google.com/p/em-python和“en.wikipedia.org/wiki/Expectation–maximization_algorithm”
  • @Moj 对不起...我似乎无法弄清楚您提到的链接中包含的信息与此处的相关性
  • (EM) 算法是一种迭代方法,用于在统计模型中找到参数的最大似然或最大后验 (MAP) 估计,其中模型依赖于未观察到的潜在变量。 EM 迭代在执行期望 (E) 步骤之间交替,该步骤为使用当前估计的对数似然评估的期望创建一个函数。我想这适合您的目标,因为事先也不知道集群的数量。这是该算法的两个库(或实现)。
  • @Moj 我希望有一些类似于 k-means 或层次聚类的东西......我知道这些需要事先知道聚类的数量......但我希望有办法找出最佳聚类数

标签: python cluster-computing scikit-learn hierarchical-clustering


【解决方案1】:

scipy 集群包可能很有用 (scipy.cluster)。 scipy.cluster.hierarchy中有层次聚类功能。但是请注意,那些需要压缩矩阵作为输入(距离矩阵的上三角)。希望文档页面对您有所帮助。

【讨论】:

    【解决方案2】:

    您可以在 scikit-learn 中使用带有预先计算的距离矩阵的大多数算法。不幸的是,您需要许多算法的集群数量。 DBSCAN 是唯一一个不需要簇数并且还使用任意距离矩阵的算法。 您也可以尝试MeanShift,但这会将距离解释为坐标 - 这也可能有效。

    还有affinity propagation,但我还没有真正看到它运作良好。不过,如果您需要多个集群,这可能会有所帮助。

    披露:我是 scikit-learn 核心开发人员。

    【讨论】:

    • 您能否提供一个使用距离矩阵作为输入的 scikit-learn 算法的reproducible example
    • sklearn 中是否有可以采用预先计算的距离矩阵的算法列表?例如,我发现虽然 DBSCAN 确实接受它,但这是一种非常相似的算法,但 OPTICS 不接受。在 AgglomerativeClustering 中,“病房”链接没有,而其他链接可以。
    【解决方案3】:

    建议看一下凝聚聚类。

    【讨论】:

      猜你喜欢
      • 2016-03-20
      • 2015-04-21
      • 1970-01-01
      • 2014-07-28
      • 2019-02-05
      • 2011-04-13
      • 2019-01-11
      • 2016-08-21
      • 2014-07-09
      相关资源
      最近更新 更多