sklearn 中的 k 均值聚类异质性
k-means cluster heterogeneity in sklearn
sklearn在收敛过程中如何计算簇异质性?
聚类异质性由每个样本点相对于指定聚类的欧几里得距离的总和给出。这为每个步骤提供了不同的值。
对于最终 k-means 模型的聚类异质性,您可以执行以下操作。
首先创建模型并将其拟合到一些数据(在我的示例中,我使用 sklearn make blob 创建了 3 个数据点 blob)。
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)
模型预测了这些集群。
模型拟合后,我们需要获得所有簇的质心。为此,您可以使用它。
k_means_cluster_centers = k_means.cluster_centers_
然后我们需要知道X中的所有数据点属于哪个簇。为此,您可以使用 pairwise_distances_argmin
这个函数 returns 集群任何一组点都作为它们最近的质心。
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 实现拟合模型期间获得异质性分数。
sklearn在收敛过程中如何计算簇异质性? 聚类异质性由每个样本点相对于指定聚类的欧几里得距离的总和给出。这为每个步骤提供了不同的值。
对于最终 k-means 模型的聚类异质性,您可以执行以下操作。
首先创建模型并将其拟合到一些数据(在我的示例中,我使用 sklearn make blob 创建了 3 个数据点 blob)。
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)
模型预测了这些集群。
模型拟合后,我们需要获得所有簇的质心。为此,您可以使用它。
k_means_cluster_centers = k_means.cluster_centers_
然后我们需要知道X中的所有数据点属于哪个簇。为此,您可以使用 pairwise_distances_argmin
这个函数 returns 集群任何一组点都作为它们最近的质心。
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 实现拟合模型期间获得异质性分数。