Mahout: 行相似性与聚类

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

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

现在我的问题是,考虑到这两种方法都使用相似性距离度量来计算文档之间的距离,聚类与RowSimilarity相比,哪个更好或更差?

我试图实现的是根据产品的标题和其他文本属性对产品进行聚类,以推荐相似的产品。任何帮助都将不胜感激。


回答:

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

当你进行聚类分析时,你希望发现数据中的结构。但接下来,你实际上应该分析你发现的结构。

现在,k-means并不是真正为文档设计的。它试图将数据集近乎最优地划分为k个Voronoi单元。除非你有充分的理由相信Voronoi单元是你的数据的良好划分,否则该算法可能几乎毫无用处。仅仅因为它返回了一个结果,并不表示这个结果是有用的。

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

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

仅仅因为你可以使用它,并不意味着它是有帮助的。请确保验证你的方法的各个步骤,例如聚类是否在任何方面有用和合理!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注