【问题标题】:efficient way of accessing data grouped by KMeans clusters访问由 KMeans 集群分组的数据的有效方法
【发布时间】:2018-01-05 23:13:44
【问题描述】:

我正在尝试围绕每个质心绘制圆,半径延伸到属于每个集群的最远点。现在我的圆圈绘制的半径延伸到整个训练数据集中离集群中心最远的点

这是我的代码:

def KMeansModel(n):
    pca = PCA(n_components=2)
    reduced_train_data = pca.fit_transform(train_data)
    KM = KMeans(n_clusters=n)
    KM.fit(reduced_train_data)
    plt.plot(reduced_train_data[:, 0], reduced_train_data[:, 1], 'k.', markersize=2)
    centroids = KM.cluster_centers_
    # Plot the centroids as a red X
    plt.scatter(centroids[:, 0], centroids[:, 1],
                marker='x', color='r')
    for i in centroids:
        print np.max(metrics.pairwise_distances(i, reduced_train_data))
        plt.gca().add_artist(plt.Circle(i, np.max(metrics.pairwise_distances(i, reduced_train_data)), fill=False))
    plt.show()

out = [KMeansModel(n) for n in np.arange(1,16,1)]

【问题讨论】:

    标签: python machine-learning scikit-learn cluster-analysis k-means


    【解决方案1】:

    当你这样做时

    metrics.pairwise_distances(i, reduced_train_data)
    

    您计算与所有训练点的距离,而不仅仅是来自相关类的训练点。为了从训练数据中找到与ind类对应的点的位置,你可以这样做

    np.where(KM.labels_==ind)[0]
    

    因此,在 for 循环中

    for i in centroids:
    

    您需要访问特定班级的培训点。这将完成这项工作:

    from sklearn.decomposition import PCA
    from sklearn.cluster import KMeans
    from sklearn import metrics
    import matplotlib.pyplot as plt
    import numpy as np
    
    def KMeansModel(n):
        pca = PCA(n_components=2)
        reduced_train_data = pca.fit_transform(train_data)
        KM = KMeans(n_clusters=n)
        KM.fit(reduced_train_data)
        plt.plot(reduced_train_data[:, 0], reduced_train_data[:, 1], 'k.', markersize=2)
        centroids = KM.cluster_centers_
        # Plot the centroids as a red X
        plt.scatter(centroids[:, 0], centroids[:, 1],
                    marker='x', color='r')
        for ind,i in enumerate(centroids):
            class_inds=np.where(KM.labels_==ind)[0]
            max_dist=np.max(metrics.pairwise_distances(i, reduced_train_data[class_inds]))
            print(max_dist)
            plt.gca().add_artist(plt.Circle(i, max_dist, fill=False))
        plt.show()
    
    out = [KMeansModel(n) for n in np.arange(1,16,1)]
    

    这是我使用代码得到的数字之一:

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 2021-07-24
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2021-12-29
      • 2014-05-07
      相关资源
      最近更新 更多