基于距离矩阵的词聚类
Posted
技术标签:
【中文标题】基于距离矩阵的词聚类【英文标题】: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” 还有pymix.org/pymix/index.php?n=PyMix.Tutorial @Moj 对不起...我似乎无法弄清楚您提到的链接中包含的信息与此处的相关性 (EM) 算法是一种迭代方法,用于在统计模型中找到参数的最大似然或最大后验 (MAP) 估计,其中模型依赖于未观察到的潜在变量。 EM 迭代在执行期望 (E) 步骤之间交替,该步骤为使用当前估计的对数似然评估的期望创建一个函数。我想这适合您的目标,因为事先也不知道集群的数量。这是该算法的两个库(或实现)。 @Moj 我希望有一些类似于 k-means 或层次聚类的东西......我知道这些需要事先知道聚类的数量......但我希望有办法找出最佳聚类数 【参考方案1】:scipy 集群包可能很有用 (scipy.cluster)。 scipy.cluster.hierarchy中有层次聚类功能。但是请注意,那些需要压缩矩阵作为输入(距离矩阵的上三角)。希望文档页面对您有所帮助。
【讨论】:
【参考方案2】:您可以在 scikit-learn 中使用带有预先计算的距离矩阵的大多数算法。不幸的是,您需要许多算法的集群数量。 DBSCAN 是唯一一个不需要簇数并且还使用任意距离矩阵的算法。 您也可以尝试MeanShift,但这会将距离解释为坐标 - 这也可能有效。
还有affinity propagation,但我还没有真正看到它运作良好。不过,如果您需要多个集群,这可能会有所帮助。
披露:我是 scikit-learn 核心开发人员。
【讨论】:
您能否提供一个使用距离矩阵作为输入的 scikit-learn 算法的reproducible example? 这里有一个:scikit-learn.org/dev/auto_examples/cluster/… sklearn 中是否有可以采用预先计算的距离矩阵的算法列表?例如,我发现虽然 DBSCAN 确实接受它,但这是一种非常相似的算法,但 OPTICS 不接受。在 AgglomerativeClustering 中,“病房”链接没有,而其他链接可以。【参考方案3】:建议看一下凝聚聚类。
【讨论】:
以上是关于基于距离矩阵的词聚类的主要内容,如果未能解决你的问题,请参考以下文章