Mahout:RowSimilarity与群集

时间:2012-06-07 07:59:15

标签: machine-learning cluster-analysis mahout

我尝试使用 KMeansClustering 方法对某些文档进行聚类,并成功创建了群集。我保存了与特定文档相对应的群集ID以获取建议。因此,每当我想推荐类似于特定文档的文档时,我都会查询特定群集中的所有文档,并从群集中返回 n 随机文档。但是,从群集中返回任何随机文档似乎不合适,我在某处读到我们应该返回距离相关文档最近的文档。

所以我开始搜索计算文档之间的距离,偶然发现了 RowSimilarity 方法,该方法将每个文档返回10个最相似的文档,按距离排序。现在,这种方法依赖于像LogLikelihood等之类的相似性度量来计算文档之间的距离。

现在我的问题是这个。 如果两种方法都使用相似距离度量来计算文档之间的距离,那么群集如何比RowSimilarity更好/更差?

我想要实现的是,我正在尝试根据其标题和其他文本属性对产品进行聚类,以推荐类似的产品。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

相似性与距离不同 - 一个在另一个很小时很大。聚类与计算距离也不相同。首先,您应该决定是否存在聚类问题 - 这听起来并不像您所说的那样。所以,不要使用k-means。

答案 1 :(得分:0)

群集只是分类或推荐的另一种变体。这是一门不同的学科。

进行群集分析时,您希望在数据中发现结构。但是,你应该分析你找到的结构。

现在k-means并不是真正意义上的文件。它试图找到一个近似最佳的数据集划分为 k Voronoi单元。除非你有充分的理由相信Voronoi单元格对你的数据是一个很好的分区,否则算法可能几乎没用。仅仅因为它返回结果并不表示结果是有用的。

对于文档,欧几里德距离(和k均值实际上是优化欧几里德距离)通常几乎没有意义。向量非常稀疏,因此k-means聚类中心通常类似于不可能(因此不敏感)的“普通文档”。

我并没有开始需要找到适当的k值,在Mahout实现上可能只是Lloyds k-means近似的近似值,等等。你有没有检查群集大小?在这些情况下,k-means通常会产生退化结果。例如,几乎所有包含1或0个元素的集群,以及包含其余元素的巨型集群。在这种情况下,您实际上可能只是从数据库中返回随机文档...

仅仅因为你可以使用它并不意味着它有用。确保验证方法的各个步骤,例如,如果群集在任何方面都有用且合理!