1

Ich versuche, Kreise um jeden Schwerpunkt mit Radius bis zum äußersten Punkt zu jedem Cluster gehören zu zeichnen. Gerade jetzt meine Kreise gezeichnet werden mit einem Radius in der gesamten Trainingsdatensatz am weitesten vom Clusterzentrum bis zu dem Punkt erstreckteffiziente Art des Zugriffs auf Daten gruppiert durch KMeans Cluster

Hier ist mein Code:

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

Antwort

2

Wenn Sie das tun

metrics.pairwise_distances(i, reduced_train_data) 

Sie Berechnen Sie die Entfernung von allen Trainingspunkten und nicht nur die Trainingspunkte aus der jeweiligen Klasse. Um die Positionen der Punkte aus den Trainingsdaten zu finden, die Klasse entsprechen ind, können Sie

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

tun innerhalb der somit für Schleife

for i in centroids: 

Sie müssen die Trainingspunkte zugreifen aus der spezifischen Klasse. Dies wird die Arbeit machen:

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

Und hier ist eine der Figuren, die ich erhalten den Code verwenden:

enter image description here

Verwandte Themen