基于主题相似度的文档聚类

数据挖掘 机器学习 分类 数据挖掘 聚类
2021-09-28 01:06:31

我有一组文档,我为每个文档分配了主题。

例如,文档 1 的主题 -> 1.0 科学、1.0 政治、0.8 历史、0. 8 信息和技术

现在我想对这些文档进行聚类,并找出哪些文档具有相似的主题。

您能否建议/推荐合适的聚类技术让我开始

PS:我对这样的东西感兴趣-> https://www.quora.com/How-do-I-cluster-documents-using-topic-models 但是,为我的文档分配的主题各不相同

2个回答

正如@Emre 建议的那样,如果您已经知道每个文档中的主题分布,则可以将每个文档表示为一个向量xdRN, 在哪里N是您的收藏中独特主题的数量。对于文档,不展示特定主题只需用零填充每个特征向量中的特定单元格。然后,您可以使用一些聚类算法,例如最近邻,使用这些特征向量。

以下python中的示例使用代码:

import pandas as pd
import numpy as np
from sklearn.metrics import pairwise_distances

# Initialize some documents
doc1 = {'Science':0.7, 'History':0.05, 'Politics':0.15, 'Sports':0.1}
doc2 = {'News':0.3, 'Art':0.5, 'Politics':0.1, 'Sports':0.1}
doc3 = {'Science':0.8, 'History':0.1, 'Politics':0.05, 'News':0.1}
doc4 = {'Science':0.2, 'Weather':0.2, 'Art':0.6, 'Sports':0.1}
collection = [doc1, doc2, doc3, doc4]
df = pd.DataFrame(collection)
# Fill missing values with zeros
df.fillna(0, inplace=True)
# Get Feature Vectors
feature_matrix = df.as_matrix()

# Get cosine similarity (i.e. 1 - cosine_distance) between pairs
sims = 1-pairwise_distances(feature_matrix, metric='cosine')

# Get the ranking of the documents given document 0
# from most similar to least similar. Don't take into account
# the first document, because it will be the same that the query was about
ranking_1 = np.argsort(sims[0,:])[::-1][1:2]
print ranking_1

ranking_2 = np.argsort(sims[1,:])[::-1][1:2]
print ranking_2

这需要 4 个文件 N=7独特的主题,用零填充缺失值并在所有文档之间创建相似度矩阵。然后在集合中查询文档 1(Science=0.7) 和 2(Art:0.5) 最相似的其他文档,我们肯定会得到相应的文档 3(Science:0.8) 和 4(Art:0.6)。

您可以尝试有关聚类和其他距离度量的更复杂的方法。

主题是集群

子空间聚类和主题建模之间几乎没有区别,除了文本可能是稀疏的和整数的,而子空间聚类器通常假设密集和连续的数据。

因此,与其尝试再次集群,不如使用您的主题。

是的,文档可以属于多个主题。那是因为文本通常是这样的,强迫所有东西都有一个独特的标签会降低质量,因为它不再反映现实。

如果您坚持每个文档都应该有一个唯一的集群,只需使用 argmax(主题权重)。