Maintenant, essayons facilement Kmeans.
C'est ce que j'ai importé
from random import randint
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
Je voulais un nombre aléatoire pour générer l'ensemble de données, donc randint J'utilise PCA pour tracer les données car je voulais que les entités 3D soient en 2D.
Cette fois, en tant qu'ensemble de données, les valeurs RVB sont générées avec des nombres aléatoires.
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)
Nous utilisons une fonction qui crée un ensemble de données de taille arbitraire avec create_data (<nombre de données à générer>). Ce code peut créer 100 entités 3D sous forme de jeu de données.
Classez les données générées avec le modèle Kmeans.
# kmeans clustering
CLUSTERS = 3
N_JOBS = 2
model = KMeans(n_clusters=CLUSTERS, n_jobs=N_JOBS).fit(data)
print(model.labels_)
Cette fois, le clustering est effectué avec 3 clusters. N_JOBS
indique le nombre de cœurs CPU utilisés. Le numéro de cluster de chaque donnée est répertorié dans model.labels_
.
Puisque nous voulons produire une image 2D cette fois, nous allons réduire les entités 3D en 2D par l'analyse des composants principaux. être capable de.
#Créer des objets 3D en 2D
pca = PCA(n_components=2)
pca.fit(data)
pca_data = pca.fit_transform(data)
Vous pouvez spécifier le nombre de dimensions à réduire avec n_composants
. Les données réduites sont stockées dans pca_data
.
color = ["red", "blue", "green"]
#Graphique des résultats de regroupement
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])])
#Graphique de données brutes
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()
Tout d'abord, les résultats du regroupement sont tracés. Étant donné que la première dimension des données après la réduction de dimension est x et que les données de la deuxième dimension sont y, et que model.label_ a des classes 0 à 2, la couleur de la liste correspond au numéro de classe. Dans le deuxième plt.figure (), les données brutes sont tracées dans la même couleur. Cependant, le problème est que dans le tracé plt, la valeur RVB doit être comprise entre 0 et 1, de sorte que la valeur RVB d'origine est divisée par 256. Après cela, il est arrondi à la troisième décimale.
Le résultat du tracé réel est Données brutes
Résultat du clustering
Cette fois, nous avons pu nous regrouper de manière relativement nette.
Cette fois, j'ai essayé Kmeans en utilisant des couleurs pour une compréhension facile. Puisqu'il s'agissait de données simples, nous avons pu les regrouper proprement.
Source Code https://github.com/sasayabaku/Machine-Learning/blob/master/Kmeans/color_kmeans.ipynb
Recommended Posts