Versuchen wir es jetzt einfach mit Kmeans.
Das habe ich importiert
from random import randint
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
Ich wollte eine Zufallszahl, um den Datensatz zu generieren, also Randint Ich verwende PCA, um die Daten zu zeichnen, weil ich wollte, dass die 3D-Features 2D sind.
Dieses Mal werden als Datensatz RGB-Werte mit Zufallszahlen generiert.
def create_data(num):
data = np.empty((0,3), int)
for i in range(num):
red = randint(0,256)
blue = randint(0,256)
green = randint(0,256)
data = np.append(data, np.array([[red,blue,green]]), axis=0)
return data
data = create_data(100)
Wir verwenden eine Funktion, die mit create_data (
Klassifizieren Sie die generierten Daten mit dem Kmeans-Modell.
# kmeans clustering
CLUSTERS = 3
N_JOBS = 2
model = KMeans(n_clusters=CLUSTERS, n_jobs=N_JOBS).fit(data)
print(model.labels_)
Dieses Mal wird das Clustering mit 3 Clustern durchgeführt. N_JOBS
gibt die Anzahl der verwendeten CPU-Kerne an. Die Clusternummer der einzelnen Daten ist in model.labels_
aufgeführt.
Da wir dieses Mal als 2D-Bild ausgeben möchten, werden wir die 3D-Features durch Hauptkomponentenanalyse auf 2D reduzieren. in der Lage sein.
#Machen Sie 3D-Features 2D
pca = PCA(n_components=2)
pca.fit(data)
pca_data = pca.fit_transform(data)
Sie können angeben, wie viele Dimensionen mit n_components
reduziert werden sollen. Die reduzierten Daten werden in "pca_data" gespeichert.
color = ["red", "blue", "green"]
#Darstellung der Clustering-Ergebnisse
plt.figure()
for i in range(pca_data.shape[0]):
plt.scatter(pca_data[i,0], pca_data[i,1], c=color[int(model.labels_[i])])
#Rohdatenplot
plt.figure()
for j in range(pca_data.shape[0]):
color = tuple((round(data[j][0]/256, 3), round(data[j][1]/256, 3), round(data[j][2]/256, 3)))
plt.scatter(pca_data[j,0], pca_data[j,1], c=color)
plt.show()
Zunächst werden die Clustering-Ergebnisse aufgezeichnet. Da die erste Dimension der Daten nach der Dimensionsreduktion x und die Daten der zweiten Dimension y sind und model.label_ die Klassen 0 bis 2 hat, entspricht die Listenfarbe der Klassennummer. In der zweiten plt.figure () werden die Rohdaten in derselben Farbe dargestellt. Das Problem ist jedoch, dass im plt-Diagramm der RGB-Wert 0 bis 1 sein muss, sodass der ursprüngliche RGB-Wert durch 256 geteilt wird. Danach wird es auf die dritte Dezimalstelle gerundet.
Das Ergebnis der tatsächlichen Handlung ist Rohdaten
Clustering-Ergebnis
Dieses Mal konnten wir relativ ordentlich Cluster bilden.
Dieses Mal habe ich versucht, Kmeans zum besseren Verständnis mit Farben zu versehen. Da es sich um einfache Daten handelte, konnten wir sie ordentlich gruppieren.
Source Code https://github.com/sasayabaku/Machine-Learning/blob/master/Kmeans/color_kmeans.ipynb
Recommended Posts