2017-07-24 44 views
-1

如何计算收敛期间sklearn中的簇异质性? 聚类异质性由每个采样点相对于指定聚类的欧几里德距离的总和给出。这为每一步提供了不同的价值。sklearn中的k-means簇异质性

+0

请指出你已经尝试了什么以及为什么没有解决你的问题 –

回答

3

对于最终k均值模型的群集异质性,您可以执行以下操作。

首先创建模型并将其适用于某些数据(在我的示例中,我使用了sklearn使blob创建3个数据点)。

import numpy as np 
from sklearn.cluster import KMeans 
from sklearn.metrics.pairwise import pairwise_distances_argmin, euclidean_distances 
from sklearn.datasets.samples_generator import make_blobs 
np.random.seed(0) 
batch_size = 45 
centers = [[1, 1], [-1, -1], [1, -1]] 
X, labels_true = make_blobs(n_samples=3000, centers=centers, cluster_std=0.7) 
k_means = KMeans(init='k-means++', n_clusters=3, n_init=10) 
k_means.fit(X) 

该模型预测了这些聚类。 enter image description here

模型拟合后,我们需要有所有聚类的质心。为此,你可以使用它。

k_means_cluster_centers = k_means.cluster_centers_ 

然后我们需要知道X中的所有数据点属于哪个簇。为此,您可以使用pairwise_distances_argmin该函数返回集群的任何一组点作为其最接近的质心。

k_means_labels = pairwise_distances_argmin(X, k_means_cluster_centers) 

然后你需要计算所有集群的异质性。为此,我们需要以下for循环和euclidean_distances函数。 euclidean_distances计算点之间的欧氏距离。

for i,j in enumerate(set(k_means_labels)): 
    positions=X[np.where(k_means_labels == i)] 
    output=sum(euclidean_distances(positions,k_means_cluster_centers[j].reshape(1,-1))) 
    print('cluster {} has a heterogeneity of {}'.format(i,output)) 

在这个循环中我们得到了属于集群X的所有值。计算所有点到该群集质心的欧氏距离。拿出总和并打印输出。

对于我的例子,输出是这样的。

cluster 0 has a heterogeneity of [ 754.20784445] 
cluster 1 has a heterogeneity of [ 852.41305495] 
cluster 2 has a heterogeneity of [ 843.7821897] 

据我所知,你只能得到异质比分你的模型与sklearn实施入时装配模型,而不是之后。

+0

最后我发现它是sklearn的限制。 Graphlab是我所知道的唯一允许您在计算过程中绘制异质性的图表。 – NunodeSousa