python - 访问按 KMeans 集群分组的数据的有效方法

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

我试图围绕每个质心绘制圆圈,其半径延伸到属于每个簇的最远点。现在,我绘制的圆的半径延伸到整个训练数据集中距离聚类中心最远的点

这是我的代码:

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)]

最佳答案

当你这样做时

metrics.pairwise_distances(i, reduced_train_data)

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

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

因此,在 for 循环内部

for i in centroids:

您需要从特定类(class)访问训练点。这将完成这项工作:

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)]

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

enter image description here

关于python - 访问按 KMeans 集群分组的数据的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45397964/

相关文章:

python - ReportLab:Flowable 在模板 'normal' 的框架 'First' 中的第 1 页太大

machine-learning - 如何在caffe和torch中设置本地偏差?

Python:以数字方式查找积分的主值

python - GAE Python - 如何设置 cron 作业来启动后端任务

python-3.x - (无法将字符串转换为 float )使用 knn 算法时出错

python - 如何从 sklearn TruncatedSVD 对象中获取特征名称?

python - 值错误: X has 231 features per sample; expecting 1228

Python sklearn kaggle/titanic 教程在最后一个特征尺度上失败

python - 为什么同一条语句打印出两个不同的值?

python - 在 python pandas 中实现 Apriori 的最佳方法