logo

K significa Clustering – Introduzione

K-significa clustering è un Apprendimento automatico non supervisionato algoritmo, che raggruppa il set di dati senza etichetta in diversi cluster. L'articolo mira a esplorare i fondamenti e il funzionamento del k mean clustering insieme all'implementazione.

Tabella dei contenuti



Cos'è il clustering K-mean?

Apprendimento automatico non supervisionato è il processo che insegna a un computer a utilizzare dati non etichettati e non classificati e consente all'algoritmo di operare su tali dati senza supervisione. Senza alcun addestramento precedente sui dati, il compito della macchina in questo caso è organizzare i dati non ordinati secondo paralleli, modelli e variazioni.

K significa clustering, assegna punti dati a uno dei cluster K in base alla loro distanza dal centro dei cluster. Si inizia assegnando in modo casuale il centroide dei cluster nello spazio. Quindi ciascun punto dati viene assegnato a uno dei cluster in base alla sua distanza dal centroide del cluster. Dopo aver assegnato ciascun punto a uno dei cluster, vengono assegnati i nuovi centroidi del cluster. Questo processo viene eseguito in modo iterativo finché non trova un cluster valido. Nell'analisi assumiamo che il numero di cluster sia dato in anticipo e dobbiamo inserire i punti in uno dei gruppi.

In alcuni casi, K non è chiaramente definito e dobbiamo pensare al numero ottimale di K. K Significa che il clustering funziona meglio, i dati sono ben separati. Quando i punti dati si sovrappongono, questo clustering non è adatto. K Means è più veloce rispetto ad altre tecniche di clustering. Fornisce un forte accoppiamento tra i punti dati. K Significa che i cluster non forniscono informazioni chiare sulla qualità dei cluster. Una diversa assegnazione iniziale del centroide del cluster può portare a cluster diversi. Inoltre, l'algoritmo K Means è sensibile al rumore. Potrebbe essersi bloccato nei minimi locali.



Qual è l'obiettivo del clustering k-means?

L'obiettivo di raggruppamento è dividere la popolazione o impostato di punti dati in un numero di gruppi in modo che i punti dati all'interno di ciascun gruppo siano più numerosi paragonabile tra loro e diversi dai punti dati all'interno degli altri gruppi. È essenzialmente un raggruppamento di cose in base a quanto simili e diverse sono tra loro.

Come funziona il clustering k-means?

Ci viene fornito un set di dati di elementi, con determinate caratteristiche e valori per queste caratteristiche (come un vettore). Il compito è classificare tali elementi in gruppi. Per raggiungere questo obiettivo, utilizzeremo l'algoritmo K-means, un algoritmo di apprendimento non supervisionato. La 'K' nel nome dell'algoritmo rappresenta il numero di gruppi/cluster in cui vogliamo classificare i nostri elementi.

(Sarà utile pensare agli oggetti come punti in uno spazio n-dimensionale). L'algoritmo classificherà gli elementi in k gruppi o cluster di somiglianza. Per calcolare tale somiglianza, utilizzeremo la distanza euclidea come misura.



L'algoritmo funziona come segue:

  1. Innanzitutto, inizializziamo casualmente k punti, chiamati medie o centroidi del cluster.
  2. Classifichiamo ciascun elemento in base alla media più vicina e aggiorniamo le coordinate della media, che sono le medie degli elementi finora classificati in quel cluster.
  3. Ripetiamo il processo per un dato numero di iterazioni e alla fine abbiamo i nostri cluster.

I punti sopra menzionati sono chiamati mezzi perché sono i valori medi degli elementi in essi classificati. Per inizializzare questi mezzi, abbiamo molte opzioni. Un metodo intuitivo consiste nell'inizializzare le medie in base a elementi casuali nel set di dati. Un altro metodo consiste nell'inizializzare le medie a valori casuali tra i confini del set di dati (se per una caratteristica X, gli elementi hanno valori in [0,3], inizializzeremo le medie con valori for X a [0,3]).

L'algoritmo di cui sopra in pseudocodice è il seguente:

Initialize k means with random values -->Per un dato numero di iterazioni: --> Itera attraverso gli elementi: --> Trova la media più vicina all'elemento calcolando la distanza euclidea dell'elemento con ciascuna delle medie --> Assegna l'elemento alla media --> Aggiorna media per spostandolo sulla media degli elementi in quel cluster>

Implementazione del clustering K-Means in Python

Esempio 1

Importa le librerie necessarie

Stiamo importando Insensibile per calcoli statistici, Matplotlib per tracciare il grafico, e make_blobs da sklearn.datasets.

Python3


formattatore di stringhe



import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.datasets>import> make_blobs>

>

>

Crea il set di dati personalizzato con make_blobs e traccialo

Python3




X,y>=> make_blobs(n_samples>=> 500>,n_features>=> 2>,centers>=> 3>,random_state>=> 23>)> fig>=> plt.figure(>0>)> plt.grid(>True>)> plt.scatter(X[:,>0>],X[:,>1>])> plt.show()>

>

>

Produzione :

Set di dati di clustering - Geeksforgeeks

Set di dati in cluster

Inizializza i centroidi casuali

Il codice inizializza tre cluster per il clustering K-means. Imposta un seme casuale e genera centri di cluster casuali all'interno di un intervallo specificato e crea un vuoto elenco di punti per ciascun cluster.

Python3




k>=> 3> clusters>=> {}> np.random.seed(>23>)> for> idx>in> range>(k):> >center>=> 2>*>(>2>*>np.random.random((X.shape[>1>],))>->1>)> >points>=> []> >cluster>=> {> >'center'> : center,> >'points'> : []> >}> > >clusters[idx]>=> cluster> > clusters>

>

>

Produzione:

{0: {'center': array([0.06919154, 1.78785042]), 'points': []},  1: {'center': array([ 1.06183904, -0.87041662]), 'points': []},  2: {'center': array([-1.11581855, 0.74488834]), 'points': []}}>

Traccia il centro di inizializzazione casuale con punti dati

Python3




plt.scatter(X[:,>0>],X[:,>1>])> plt.grid(>True>)> for> i>in> clusters:> >center>=> clusters[i][>'center'>]> >plt.scatter(center[>0>],center[>1>],marker>=> '*'>,c>=> 'red'>)> plt.show()>

>

>

Produzione :

Punti dati con centro casuale - Geeksforgeeks

Punti dati con centro casuale

Il grafico visualizza un grafico a dispersione di punti dati (X[:,0], X[:,1]) con linee griglia. Segna anche i centri iniziali dell'ammasso (stelle rosse) generati per il clustering K-means.

Definire la distanza euclidea

Python3




def> distance(p1,p2):> >return> np.sqrt(np.>sum>((p1>->p2)>*>*>2>))>

>

>

Creare la funzione per assegnare e aggiornare il centro cluster

Il passaggio E assegna i punti dati al centro cluster più vicino, mentre il passaggio M aggiorna i centri cluster in base alla media dei punti assegnati nel clustering K-means.

Python3




#Implementing E step> def> assign_clusters(X, clusters):> >for> idx>in> range>(X.shape[>0>]):> >dist>=> []> > >curr_x>=> X[idx]> > >for> i>in> range>(k):> >dis>=> distance(curr_x,clusters[i][>'center'>])> >dist.append(dis)> >curr_cluster>=> np.argmin(dist)> >clusters[curr_cluster][>'points'>].append(curr_x)> >return> clusters> > #Implementing the M-Step> def> update_clusters(X, clusters):> >for> i>in> range>(k):> >points>=> np.array(clusters[i][>'points'>])> >if> points.shape[>0>]>>0>:> >new_center>=> points.mean(axis>=>0>)> >clusters[i][>'center'>]>=> new_center> > >clusters[i][>'points'>]>=> []> >return> clusters>

>

>

Passaggio 7: creare la funzione per prevedere il cluster per i punti dati

Python3

nazionalità di pete davidson




def> pred_cluster(X, clusters):> >pred>=> []> >for> i>in> range>(X.shape[>0>]):> >dist>=> []> >for> j>in> range>(k):> >dist.append(distance(X[i],clusters[j][>'center'>]))> >pred.append(np.argmin(dist))> >return> pred>

>

>

Assegna, aggiorna e prevedi il centro del cluster

Python3




clusters>=> assign_clusters(X,clusters)> clusters>=> update_clusters(X,clusters)> pred>=> pred_cluster(X,clusters)>

>

>

cos'è un monitor

Traccia i punti dati con il centro del cluster previsto

Python3




plt.scatter(X[:,>0>],X[:,>1>],c>=> pred)> for> i>in> clusters:> >center>=> clusters[i][>'center'>]> >plt.scatter(center[>0>],center[>1>],marker>=> '^'>,c>=> 'red'>)> plt.show()>

>

>

Produzione :

K-significa Clustering - Geeksforgeeks

K-significa clustering

Il grafico mostra i punti dati colorati in base ai cluster previsti. I marcatori rossi rappresentano i centri dei cluster aggiornati dopo i passaggi E-M nell'algoritmo di clustering K-means.

Esempio 2

Importa le librerie necessarie

Python3




import> pandas as pd> import> numpy as np> import> seaborn as sns> import> matplotlib.pyplot as plt> import> matplotlib.cm as cm> from> sklearn.datasets>import> load_iris> from> sklearn.cluster>import> KMeans>

>

>

Carica il set di dati

Python3




X, y>=> load_iris(return_X_y>=>True>)>

come ha inventato la scuola

>

>

Metodo del gomito

Trovare il numero ideale di gruppi in cui dividere i dati è una fase fondamentale in qualsiasi algoritmo non supervisionato. Una delle tecniche più comuni per determinare questo valore ideale di k è l'approccio del gomito.

Python3




#Find optimum number of cluster> sse>=> []>#SUM OF SQUARED ERROR> for> k>in> range>(>1>,>11>):> >km>=> KMeans(n_clusters>=>k, random_state>=>2>)> >km.fit(X)> >sse.append(km.inertia_)>

>

>

Traccia il grafico del gomito per trovare il numero ottimale di cluster

Python3




sns.set_style(>'whitegrid'>)> g>=>sns.lineplot(x>=>range>(>1>,>11>), y>=>sse)> g.>set>(xlabel>=>'Number of cluster (k)'>,> >ylabel>=> 'Sum Squared Error'>,> >title>=>'Elbow Method'>)> plt.show()>

>

>

Produzione:

Metodo del gomito

Dal grafico sopra, possiamo osservare che a k=2 ek=3 si trova una situazione a gomito. Quindi, stiamo considerando K=3

Costruisci il modello di clustering Kmeans

Python3




kmeans>=> KMeans(n_clusters>=> 3>, random_state>=> 2>)> kmeans.fit(X)>

>

>

Produzione:

KMeans KMeans(n_clusters=3, random_state=2)>

Trova il centro del cluster

Python3

stampa Java




kmeans.cluster_centers_>

>

>

Produzione:

array([[5.006 , 3.428 , 1.462 , 0.246 ],  [5.9016129 , 2.7483871 , 4.39354839, 1.43387097],  [6.85 , 3.07368421, 5.74210526, 2.07105263]])>

Prevedere il gruppo di cluster:

Python3




pred>=> kmeans.fit_predict(X)> pred>

>

>

Produzione:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2,  2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 2,  2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1], dtype=int32)>

Traccia il centro del cluster con i punti dati

Python3




plt.figure(figsize>=>(>12>,>5>))> plt.subplot(>1>,>2>,>1>)> plt.scatter(X[:,>0>],X[:,>1>],c>=> pred, cmap>=>cm.Accent)> plt.grid(>True>)> for> center>in> kmeans.cluster_centers_:> >center>=> center[:>2>]> >plt.scatter(center[>0>],center[>1>],marker>=> '^'>,c>=> 'red'>)> plt.xlabel(>'petal length (cm)'>)> plt.ylabel(>'petal width (cm)'>)> > plt.subplot(>1>,>2>,>2>)> plt.scatter(X[:,>2>],X[:,>3>],c>=> pred, cmap>=>cm.Accent)> plt.grid(>True>)> for> center>in> kmeans.cluster_centers_:> >center>=> center[>2>:>4>]> >plt.scatter(center[>0>],center[>1>],marker>=> '^'>,c>=> 'red'>)> plt.xlabel(>'sepal length (cm)'>)> plt.ylabel(>'sepal width (cm)'>)> plt.show()>

>

>

Produzione:

K-significa clustering - Geeksforgeeks

K-significa clustering

La sottotrama a sinistra mostra la lunghezza del petalo rispetto alla larghezza del petalo con punti dati colorati in base ai cluster e gli indicatori rossi indicano i centri dei cluster K-mean. La sottotrama a destra mostra la lunghezza dei sepali rispetto alla larghezza dei sepali in modo simile.

Conclusione

In conclusione, il clustering K-means è un potente algoritmo di apprendimento automatico non supervisionato per raggruppare set di dati senza etichetta. Il suo obiettivo è dividere i dati in cluster, rendendo i punti dati simili parte dello stesso gruppo. L'algoritmo inizializza i centroidi del cluster e assegna iterativamente i punti dati al centroide più vicino, aggiornando i centroidi in base alla media dei punti in ciascun cluster.

Domande frequenti (FAQ)

1. Cos'è il clustering k-means per l'analisi dei dati?

K-means è un metodo di partizionamento che divide un set di dati in 'k' sottoinsiemi distinti e non sovrapposti (cluster) in base alla somiglianza, con l'obiettivo di ridurre al minimo la varianza all'interno di ciascun cluster.

2.Qual è un esempio di k-mean nella vita reale?

Segmentazione della clientela nel marketing, dove k-means raggruppa i clienti in base al comportamento di acquisto, consentendo alle aziende di personalizzare le strategie di marketing per diversi segmenti.

3. Che tipo di dati è il modello di clustering k-means?

K-medie funziona bene con i dati numerici, dove il concetto di distanza tra i punti dati è significativo. È comunemente applicato a variabili continue.

4.Le medie K vengono utilizzate per la previsione?

Le medie K vengono utilizzate principalmente per raggruppare e raggruppare punti dati simili. Non prevede etichette per i nuovi dati; li assegna ai cluster esistenti in base alla somiglianza.

5.Qual è l'obiettivo del clustering k-means?

L’obiettivo è partizionare i dati in cluster “k”, riducendo al minimo la varianza all’interno del cluster. Cerca di formare gruppi in cui i punti dati all'interno di ciascun cluster siano più simili tra loro rispetto a quelli di altri cluster.