Python 如何将相似的列表聚集在一起?
我正在寻找一种算法,它能够对内容几乎相同的字符串列表进行分组 这是一个列表示例。总共有5个不同的单词Python 如何将相似的列表聚集在一起?,python,algorithm,machine-learning,cluster-analysis,Python,Algorithm,Machine Learning,Cluster Analysis,我正在寻找一种算法,它能够对内容几乎相同的字符串列表进行分组 这是一个列表示例。总共有5个不同的单词 A = ['first', 'second', 'third'] B = ['first', 'forth'] C = ['second', 'third'] D = ['first', 'third'] E = ['first', 'fifth'] F = ['fourth', 'fifth'] 你可以看到A,C和D有很多共同点,还有B,E和F 我想到了一种聚类算法,它可以为同一个集群提供几
A = ['first', 'second', 'third']
B = ['first', 'forth']
C = ['second', 'third']
D = ['first', 'third']
E = ['first', 'fifth']
F = ['fourth', 'fifth']
你可以看到A,C和D有很多共同点,还有B,E和F
我想到了一种聚类算法,它可以为同一个集群提供几乎相同的列表
我想要两个集群,确保一个单词至少是一个集群
在本例中,列表A、C和D应具有集群1
B、E和F簇2
Python中是否有一种算法(或机器学习)可用于解决此类问题?这看起来是一个很好的模型用例
LDA
是一种无监督的模型,可以在一组观察结果中找到相似的组,然后可以使用这些组为每个组分配一个主题
以下是您可以进行此操作的方法:
from sklearn.feature_extraction.text import CountVectorizer
import lda
拟合a以从字符串列表中获取令牌计数矩阵:
l = [' '.join(i) for i in [A,B,C,D,E,F]]
vec = CountVectorizer(analyzer='word', ngram_range=(1,1))
X = vec.fit_transform(l)
在CountVectorizer
的结果上使用并安装一个模型(还有其他带有lda
模型实现的模块,如中)
并为2
创建的主题分配组号:
doc_topic = model.doc_topic_
for i in range(len(l)):
print(f'Cluster {i}: Topic ', doc_topic[i].argmax())
Cluster 0: Topic 1 # -> A
Cluster 1: Topic 0
Cluster 2: Topic 1 # -> C
Cluster 3: Topic 1 # -> D
Cluster 4: Topic 0
Cluster 5: Topic 0
这看起来是一个很好的模型用例
LDA
是一种无监督的模型,可以在一组观察结果中找到相似的组,然后可以使用这些组为每个组分配一个主题
以下是您可以进行此操作的方法:
from sklearn.feature_extraction.text import CountVectorizer
import lda
拟合a以从字符串列表中获取令牌计数矩阵:
l = [' '.join(i) for i in [A,B,C,D,E,F]]
vec = CountVectorizer(analyzer='word', ngram_range=(1,1))
X = vec.fit_transform(l)
在CountVectorizer
的结果上使用并安装一个模型(还有其他带有lda
模型实现的模块,如中)
并为2
创建的主题分配组号:
doc_topic = model.doc_topic_
for i in range(len(l)):
print(f'Cluster {i}: Topic ', doc_topic[i].argmax())
Cluster 0: Topic 1 # -> A
Cluster 1: Topic 0
Cluster 2: Topic 1 # -> C
Cluster 3: Topic 1 # -> D
Cluster 4: Topic 0
Cluster 5: Topic 0