我使用以下代码创建集群。我想得到每个向量属于每个群集的概率。怎么做?
import numpy as np
from nltk import cluster
from nltk.cluster import euclidean_distance
vectors = [np.array(f) for f in [[3, 3], [1, 2], [4, 2], [4, 0]]]
clusterer = cluster.KMeansClusterer(2, euclidean_distance)
clusters = clusterer.cluster(vectors, assign_clusters=True, trace=False)
答案 0 :(得分:2)
from sklearn import mixture
model = mixture.GMM(n_components=4)
model.fit(dataset)
model.score_samples(dataset)
返回,根据docs
每次观察的每种混合物成分的后验概率。
但是,如果聚类没有为您的数据收敛,这当然无济于事。
答案 1 :(得分:1)
你在说:
vectors
变量或只需打印clusters
个变量即可。如果你看到[0,0,1,1],那么它意味着[3,3]和[1,2](前两个)被分配给集群0,[4,2]和[4,0] ](最后两个)到集群1.这里没有概率。
由于您使用的是KMeans,因此您首先需要知道每个群集的质心是什么。 nltk API说这是一个私人信息:有趣的变量(_means
)以下划线为前缀。该变量将来可能会发生变化,但如果您愿意,您仍然可以获得该值。
NLTK算法是随机的,因此每次都会得到不同的质心。正如我之前所说,您可以看到print(clusters)
的作业。您可以使用print(clusterer._means)
查看质心。假设你得到了带有质心[2,2.5]和[4,1]的赋值[0,0,1,1]。将使用最近的集群将新向量(例如[1,2])分配给现有集群。同样,在这里讨论概率也没什么意义。您可以通过使用所有聚类的距离获得分数,然后使用softmax获得概率,如果您真的想要。