0

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

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

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

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

4

2 回答 2

0

相似性与距离不同——一个大而另一个小。聚类也不等同于计算距离。首先,您应该确定您是否有聚类问题——这听起来不像您所说的那样。所以,不要使用k-means。

于 2012-06-07T11:57:39.073 回答
0

聚类不仅仅是分类或推荐的另一种变体。这是一门不同的学科。

在进行聚类分析时,您希望发现数据中的结构。但是,您实际上应该分析您找到的结构。

现在 k-means 并不真正适用于文档。它试图找到一个接近最优的数据集划分为k 个 Voronoi 单元。除非您有充分的理由相信 Voronoi 单元格可以很好地划分您的数据,否则该算法可能毫无用处。仅仅因为它返回一个结果并不表示该结果是有用的。

对于文档,欧几里得距离(而 k-means 实际上是优化欧几里得距离)通常毫无意义。向量非常稀疏,k-means 聚类中心通常会类似于不可能(因此不敏感)的“平均文档”。

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

仅仅因为你可以使用它并不意味着它是有帮助的。确保验证您的方法的各个步骤,例如集群是否有用且合理!

于 2012-06-07T14:54:24.417 回答