1) Le processus de clustering k-means du jeu manuel des cartes à jouer:> 30 cartes, 3 types
Ici, nous avons sélectionné 40 cartes, sélectionné au hasard trois cartes et utilisé leurs points respectifs comme centre de classe, la première fois était 2 6 9
La base de chaque classification est que les points sont proches du centre, et ils sont classés sous la classification. Après avoir classifié pour la première fois, calculé la valeur centrale de chaque classe (moyenne de tous les nombres de cette classe), redessiné le centre de trois classes, la deuxième classe est la suivante
Répétez les étapes de calcul ci-dessus jusqu'à ce que le centre de la classe ne change plus. Les résultats spécifiques sont présentés dans le tableau suivant:
2). * L'algorithme K-means est écrit de manière indépendante, le regroupement est effectué sur les données de longueur des pétales d'iris et affiché avec un nuage de points. (Points positifs)
import numpy as np; from sklearn.datasets import load_iris import matplotlib.pyplot as plt iris = load_iris () pl = iris.data [:, 2] n = len (pl) #nombre d' échantillons k = 3 # numéro du centre dist = np.zeros ([n, k + 1]) #Initialize a matrix center = np.zeros ([k]) centerNew = np.zeros ([k]) for i in range (k): #Évitez de commencer par Le même centre pour j dans la plage (n): si pl [j] dans le centre: continuez autrement: centre [i] = pl [j] casse tandis que (Vrai): pour i dans la plage (n): pour j dans la plage ( k): nouveau centre pour i dans la plage (k): dist [i, j] = np.sqrt ((pl [i] -center [j]) ** 2) #Calculer la distance dist [i, k] = np.argmin (dist [i ,: k]) index = dist [:, k] == i centerNew [i] = np.mean (pl [index]) #si deux centres avant et après Sautez s'ils sont égaux, sinon continuez si np.all ((center == centerNew)): break else: for i in range (k): center [i] = centerNew [i] plt.scatter (pl, pl, c = dist [:, k], s = 60, cmap = 'rainbow') plt.show ()
Après la sortie des résultats, ce n'était pas très satisfaisant. Suivi pour trouver des problèmes à améliorer, les résultats sont les suivants:
3) Utilisez sklearn.cluster.KMeans et les données de longueur des pétales d'iris pour le regroupement et l'affichage avec un nuage de points.
import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import load_iris iris = load_iris () pl = iris.data [:, 2] x = pl.reshape (-1,1) est = KMeans (n_clusters = 3) est.fit (x) y_kmeans = est.predict (x) plt.scatter (x [:, 0], x [:, 0], c = y_kmeans, s = 50, cmap = 'rainbow'); plt.show ()
4) Les données complètes des fleurs d'iris sont regroupées et affichées avec un nuage de points.
irisData = iris.data KMeans_model = KMeans (n_clusters = 3) KMeans_model.fit (irisData) pre = KMeans_model.predict (irisData) plt.scatter (irisData [:, 2], irisData [:, 3], c = pre, s = 50, cmap = 'arc-en-ciel') plt.show ()
5) Pensez à ce qui est utilisé dans l'algorithme k-means?
L'algorithme k-means est un algorithme de classification non supervisé. Il utilise principalement un grand nombre de données d'entités pour distinguer les catégories. Comme dans la question ci-dessus, l'algorithme KMeans peut être utilisé pour distinguer les types d'iris. Dans la vie réelle, il peut également être utilisé pour distinguer les personnes. Les données telles que le poids et la taille peuvent être utilisées pour diviser les personnes ayant des conditions physiques différentes: grandes, courtes, grasses, minces, etc., et les œuvres courtes et longues peuvent également être classées selon la longueur des œuvres littéraires.