我有一组文档,我为每个文档分配了主题。
例如,文档 1 的主题 -> 1.0 科学、1.0 政治、0.8 历史、0. 8 信息和技术
现在我想对这些文档进行聚类,并找出哪些文档具有相似的主题。
您能否建议/推荐合适的聚类技术让我开始
PS:我对这样的东西感兴趣-> https://www.quora.com/How-do-I-cluster-documents-using-topic-models 但是,为我的文档分配的主题各不相同
我有一组文档,我为每个文档分配了主题。
例如,文档 1 的主题 -> 1.0 科学、1.0 政治、0.8 历史、0. 8 信息和技术
现在我想对这些文档进行聚类,并找出哪些文档具有相似的主题。
您能否建议/推荐合适的聚类技术让我开始
PS:我对这样的东西感兴趣-> https://www.quora.com/How-do-I-cluster-documents-using-topic-models 但是,为我的文档分配的主题各不相同
正如@Emre 建议的那样,如果您已经知道每个文档中的主题分布,则可以将每个文档表示为一个向量, 在哪里是您的收藏中独特主题的数量。对于文档,不展示特定主题只需用零填充每个特征向量中的特定单元格。然后,您可以使用一些聚类算法,例如最近邻,使用这些特征向量。
以下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 个文件 独特的主题,用零填充缺失值并在所有文档之间创建相似度矩阵。然后在集合中查询文档 1(Science=0.7) 和 2(Art:0.5) 最相似的其他文档,我们肯定会得到相应的文档 3(Science:0.8) 和 4(Art:0.6)。
您可以尝试有关聚类和其他距离度量的更复杂的方法。
子空间聚类和主题建模之间几乎没有区别,除了文本可能是稀疏的和整数的,而子空间聚类器通常假设密集和连续的数据。
因此,与其尝试再次集群,不如使用您的主题。
是的,文档可以属于多个主题。那是因为文本通常是这样的,强迫所有东西都有一个独特的标签会降低质量,因为它不再反映现实。
如果您坚持每个文档都应该有一个唯一的集群,只需使用 argmax(主题权重)。