如何获得每个向量属于每个群集的概率?

时间:2016-07-01 06:49:01

标签: nltk

我使用以下代码创建集群。我想得到每个向量属于每个群集的概率。怎么做?

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)

2 个答案:

答案 0 :(得分:2)

from sklearn import mixture
model = mixture.GMM(n_components=4)
model.fit(dataset) 
model.score_samples(dataset)

返回,根据docs

  

每次观察的每种混合物成分的后验概率。

但是,如果聚类没有为您的数据收敛,这当然无济于事。

答案 1 :(得分:1)

你在说:

  1. vectors变量或
  2. 对向量进行的分配kmeans
  3. 将新向量分配给现有群集?
  4. 1。 K-means分配

    只需打印clusters个变量即可。如果你看到[0,0,1,1],那么它意味着[3,3]和[1,2](前两个)被分配给集群0,[4,2]和[4,0] ](最后两个)到集群1.这里没有概率。

    2。将新矢量分配给现有集群

    由于您使用的是KMeans,因此您首先需要知道每个群集的质心是什么。 nltk API说这是一个私人信息:有趣的变量(_means)以下划线为前缀。该变量将来可能会发生变化,但如果您愿意,您仍然可以获得该值。

    NLTK算法是随机的,因此每次都会得到不同的质心。正如我之前所说,您可以看到print(clusters)的作业。您可以使用print(clusterer._means)查看质心。假设你得到了带有质心[2,2.5]和[4,1]的赋值[0,0,1,1]。将使用最近的集群将新向量(例如[1,2])分配给现有集群。同样,在这里讨论概率也没什么意义。您可以通过使用所有聚类的距离获得分数,然后使用softmax获得概率,如果您真的想要。