首页 文章

k-means集群异质性在sklearn中

提问于
浏览
-1

如何在收敛期间计算sklearn中的聚类异质性?群集异质性由每个样本点相对于指定群集的欧几里德距离的总和给出 . 这为每个步骤提供了不同的值 .

1 回答

  • 3

    对于最终k-means模型的聚类异质性,您可以执行以下操作 .

    首先创建模型并使其适合某些数据(在我的示例中,我使用sklearn make blobs来创建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)
    

    该模型预测了这些集群 .
    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实现拟合模型时 .

相关问题