[PYTHON] Kmeans débutants

Maintenant, essayons facilement Kmeans.

Bibliothèque

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.

Préparation des données

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.

Clustering

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_.

Sortie de résultat

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.

Réduction de dimension

#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.

Tracé réel

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 Figure_2.png

Résultat du clustering Figure_1.png

Cette fois, nous avons pu nous regrouper de manière relativement nette.

Résumé

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

Kmeans débutants
Débutant de sortie
Comprendre k-means ++
Débutant ABC154 (Python)
Concours AtCoder Débutant 177
Débutant ABC156 (Python)
Comprendre la méthode k-means
k-means et kernel k-means
mémo débutant python (9.2-10)
Concours AtCoder Débutant 179
mémo débutant python (9.1)
Notes de débutant Python
[Débutant] Tableau Python
Concours AtCoder Débutant 172
Concours AtCoder Débutant 180
Environnement virtuel débutant
Débutant ABC155 (Python)
Concours AtCoder Débutant 173
[Débutant] Fonctions Python
Débutant ABC157 (Python)
PyQ ~ Python Débutant ~
Concours Atcoder Débutant 153
kmeans ++ avec scikit-learn
Mémo débutant Python (2)
Python débutant Zundokokiyoshi
Tutoriel pour débutants en tyrolienne
Clustering et analyse en composantes principales par méthode K-means (débutant)