top of page

K-means Cluster analysis : teoria e codice in Python

K-means è un algoritmo di clustering non supervisionato molto utilizzato in statistica e machine learning. Consiste in un metodo di suddivisione di un insieme di oggetti in K gruppi (o cluster) in modo da ottenere il massimo grado di somiglianza all'interno di ciascun cluster e il massimo grado di dissomiglianza tra gli elementi appartenenti a cluster diversi.


In questo articolo, esamineremo in dettaglio la teoria di base di K-means, la sua storia, gli utilizzi e i vantaggi di questo algoritmo, nonché le formule matematiche alla base del suo funzionamento. Inoltre, forniremo un esempio pratico di cluster analysis con Python, mostrando come eseguire un'analisi di cluster utilizzando K-means su un dataset di esempio.

Questo articolo è rivolto a chiunque sia interessato a conoscere meglio K-means e a imparare a utilizzarlo per eseguire analisi di cluster. Potrebbe essere particolarmente utile per chi studia statistica o machine learning o per chi lavora in ambiti in cui il clustering può essere applicato, come il marketing, la finanza, la biologia, etc.



Se sei un principiante in questi campi, non temere: in questo articolo spiegheremo tutto in modo semplice e accessibile, fornendo esempi pratici che ti aiuteranno a capire come funziona K-means e come utilizzarlo per risolvere problemi di clustering. Se sei già un esperto di K-means, questo articolo potrebbe comunque offrirti spunti interessanti e nuove prospettive sull'utilizzo di questo algoritmo.


Indice su K-means Cluster analysis:

  • Teoria di base di K-means

    1. Cos'è il clustering e a cosa serve

    2. Come funziona l'algoritmo di K-means

    3. Come si sceglie il numero di cluster K

    4. Vantaggi e svantaggi di K-means

  • Storia di K-means

    1. Chi è James MacQueen e come ha sviluppato l'algoritmo di K-means

    2. Come K-means è diventato popolare negli anni '90

  • Utilizzi di K-means

    1. Esempi di applicazioni di K-means in diverse aree, come il marketing, la finanza, la biologia, etc.ubunt

  • Formule di K-means

    1. Spiegazione delle formule matematiche alla base di K-means

  • Esempio di cluster analysis con Python

    1. Passi per eseguire un'analisi di cluster con K-means in Python

    2. Codice di esempio per eseguire un'analisi di cluster su un dataset di esempio


Cosa è K-means?

La teoria di base di K-means si basa sull'idea di suddividere un insieme di oggetti in K gruppi (o cluster) in modo da ottenere il massimo grado di somiglianza all'interno di ciascun cluster e il massimo grado di dissomiglianza tra gli elementi appartenenti a cluster diversi. Questo viene generalmente fatto utilizzando una misura di distanza, come ad esempio la distanza Euclidea.


Il processo di clustering viene effettuato utilizzando un algoritmo iterativo, che parte da K centroidi (punti rappresentativi) scelti in modo casuale e assegna ogni oggetto al cluster il cui centroide è più vicino. Una volta che tutti gli oggetti sono stati assegnati a un cluster, i centroidi vengono aggiornati come la media dei punti assegnati al cluster. Questo processo viene ripetuto finché i centroidi non convergono, ovvero finché non cambiano più significativamente.


Una volta che il processo di clustering è stato completato, ogni oggetto viene assegnato al cluster a cui appartiene in base alla distanza dal centroide. Il numero di cluster K viene solitamente scelto in base alla dimensione del dataset e al numero di cluster che si desidera ottenere. Esistono diverse tecniche per scegliere il numero ottimale di cluster, come ad esempio l'utilizzo della curva di Elbow o della metrica di Calinski-Harabasz.


K-means presenta alcuni vantaggi, come ad esempio la sua semplicità di implementazione e il suo tempo di esecuzione relativamente breve. Tuttavia, ha anche alcuni svantaggi, come la dipendenza dalla scelta dei centroidi iniziali e la difficoltà nel gestire cluster di forma irregolare o di densità variabile. Inoltre, K-means è sensibile alle outlier (punti anomali) e non è adatto a dati non linearmente separabili.



Quando è stato sviluppato K-means?

K-means è stato sviluppato negli anni '50 da James MacQueen, un matematico e statistico statunitense. MacQueen aveva bisogno di un metodo per suddividere un insieme di dati in gruppi omogenei in modo da poter studiare le relazioni tra le variabili e i gruppi. L'algoritmo di K-means che ha sviluppato utilizzava una misura di distanza per assegnare gli oggetti ai cluster e aggiornare i centroidi iterativamente fino a quando non si otteneva una convergenza.


Tuttavia, K-means non è diventato popolare fino agli anni '90, con l'avvento dei computers e dei software di data mining. In particolare, l'aumento della potenza di calcolo e la disponibilità di grandi quantità di dati hanno reso possibile l'applicazione di K-means su dataset di grandi dimensioni. Inoltre, l'interesse per il machine learning e il data mining ha contribuito a diffondere l'utilizzo di K-means in diverse aree, come il marketing, la finanza, la biologia, etc.


Oggi, K-means è uno dei metodi di clustering più utilizzati in statistica e machine learning, e continua a essere uno strumento molto utile per esplorare e analizzare i dati. Grazie alla sua semplicità di implementazione e al suo tempo di esecuzione relativamente breve, K-means è spesso utilizzato come punto di partenza per l'analisi di cluster e come base per lo sviluppo di altri algoritmi di clustering più sofisticati.


Applicazioni di K-means:

K-means è uno degli algoritmi di clustering più utilizzati in diverse aree, grazie alla sua semplicità di implementazione e al suo tempo di esecuzione relativamente breve. Ecco alcuni esempi di come K-means viene utilizzato in diverse aree:

  • Marketing: K-means può essere utilizzato per segmentare i clienti in base alle loro caratteristiche demografiche, alle loro preferenze e ai loro comportamenti di acquisto. Ad esempio, un'azienda di abbigliamento potrebbe utilizzare K-means per suddividere i suoi clienti in gruppi in base al genere, all'età, alla frequenza di acquisto e al budget, al fine di creare campagne di marketing mirate a ciascun gruppo.

  • Finanza: K-means può essere utilizzato per identificare gruppi di investitori con caratteristiche simili, al fine di offrire loro prodotti finanziari adeguati. Ad esempio, una banca potrebbe utilizzare K-means per suddividere i suoi clienti in gruppi in base al reddito, all'età, alla propensione al rischio e alla diversificazione del portafoglio, al fine di offrire loro prodotti di investimento personalizzati.

  • Biologia: K-means può essere utilizzato per analizzare i dati di espressione genica e identificare gruppi di geni con espressione simile. Ad esempio, uno studio potrebbe utilizzare K-means per suddividere i geni in gruppi in base all'espressione in diversi tessuti o in risposta a diverse condizioni, al fine di identificare i geni coinvolti in specifiche funzioni biologiche.

Questi sono solo alcuni esempi di come K-means viene utilizzato in diverse aree. In generale, K-means è uno strumento molto utile per esplorare e analizzare i dati e scoprire relazioni e pattern nascosti.



Formule Matematiche di K-means

K-means è basato sulla minimizzazione di una funzione di costo che misura la somiglianza degli oggetti all'interno di ciascun cluster. Nello specifico, la funzione di costo di K-means è data dalla somma delle distanze quadrate (SSE, Sum of Squared Errors) degli oggetti dal centroide del cluster a cui appartengono:


SSE = ∑(x - μ)^2

dove x è l'oggetto i-esimo, μ è il centroide del cluster a cui appartiene l'oggetto x, e la somma viene effettuata su tutti gli oggetti del dataset. La funzione di costo viene minimizzata iterativamente aggiornando i centroidi come la media degli oggetti assegnati al cluster.


Per eseguire il clustering con K-means, il processo consiste nei seguenti passi:

  1. Scegliere K, il numero di cluster.

  2. Inizializzare i centroidi scegliendo K punti casuali dal dataset.

  3. Assegnare ogni oggetto al cluster il cui centroide è più vicino, utilizzando una misura di distanza come ad esempio la distanza Euclidea.

  4. Aggiornare i centroidi come la media degli oggetti assegnati al cluster.

  5. Ripetere i passi 3 e 4 finché i centroidi non convergono, ovvero finché non cambiano più significativamente.

Una volta che il processo di clustering è stato completato, ogni oggetto viene assegnato al cluster a cui appartiene in base alla distanza dal centroide.




Esempio di cluster analysis con Python

Per illustrare come utilizzare K-means per eseguire un'analisi di cluster, in questa sezione forniremo un esempio pratico utilizzando Python. Prima di iniziare, assicurati di avere i seguenti prerequisiti installati sul tuo computer:

  • Un ambiente di sviluppo Python, come ad esempio Anaconda o PyCharm.

  • La libreria NumPy per l'elaborazione dei dati in forma numerica.

  • La libreria Pandas per il caricamento e la manipolazione dei dati.

  • La libreria Matplotlib per la visualizzazione dei dati.

Una volta che hai installato queste librerie, sei pronto per iniziare a lavorare con K-means in Python. Per semplicità, useremo un set di dati fittizio su degli studenti e i loro voti. Immagina di avere un dataset che contiene le seguenti informazioni sugli studenti:

  • Nome

  • Genere (Maschio o Femmina)

  • Età

  • Numero di esami sostenuti

  • Voto medio

Per creare questo dataset fittizio, possiamo utilizzare la libreria Pandas e generare dei dati casuali. Ecco un esempio di come fare:


import pandas as pd
import numpy as np

# Crea un array di nomi casuali
nomi = ['Mario', 'Anna', 'Giovanni', 'Sara', 'Luca', 'Chiara', 'Francesco', 'Martina', 'Riccardo', 'Alessia']

# Crea un array di generi casuali
generi = ['M', 'F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'F']

# Crea un array di età casuali
età = np.random.randint(18, 26, size=10)

# Crea un array di numero di esami sostenuti casuali
esami = np.random.randint(1, 10, size=10)

# Crea un array di voti medi casuali
voti = np.random.randint(60, 101, size=10)


Una volta che abbiamo generato i nostri dati fittizi, possiamo creare un dataframe Pandas utilizzando questi array:


# Crea il dataframe Pandas
df = pd.DataFrame({'Nome': nomi, 'Genere': generi, 'Età': età, 'Esami': esami, 'Voto': voti})

# Mostra le prime 5 righe del dataframe
df.head()

Il risultato dovrebbe essere simile a questo:




Ora che abbiamo il nostro dataset, possiamo procedere con l'analisi di cluster utilizzando K-means. Per fare questo, dobbiamo prima importare il modulo di K-means dalla libreria scikit-learn:

from sklearn.cluster import KMeans

A questo punto, possiamo creare un'istanza di KMeans specificando il numero di cluster che vogliamo ottenere (in questo caso, 2):

# Crea un'istanza di KMeans con 2 cluster
kmeans = KMeans(n_clusters=2)


Infine, possiamo utilizzare il metodo fit() per addestrare il modello di K-means sul nostro dataset:


# Addestra il modello di K-means sul dataset
kmeans.fit(df[['Età', 'Esami', 'Voto']])

Il modello di K-means ora è stato addestrato e può essere utilizzato per assegnare ogni oggetto del dataset a uno dei due cluster. Possiamo ottenere le etichette dei cluster assegnate ad ogni oggetto utilizzando il metodo predict():


# Assegna le etichette dei cluster a ogni oggetto del dataset
df['Cluster'] = kmeans.predict(df[['Età', 'Esami', 'Voto']])

# Mostra le prime 5 righe del dataframe con la colonna Cluster aggiunta
df.head()

Il risultato dovrebbe essere simile a questo:


Come puoi vedere, ogni oggetto del dataset è stato assegnato a uno dei due cluster (0 o 1) in base alle sue caratteristiche (età, numero di esami sostenuti, voto medio). A questo punto, possiamo utilizzare queste informazioni per esplorare le caratteristiche dei due cluster e scoprire eventuali pattern o relazioni interessanti.


A questo punto, possiamo utilizzare le informazioni ottenute dal modello di K-means per esplorare le caratteristiche dei due cluster e scoprire eventuali pattern o relazioni interessanti. Ad esempio, possiamo utilizzare la libreria Matplotlib per visualizzare i dati in un grafico a dispersione e ottenere una rappresentazione visiva dei due cluster:


import matplotlib.pyplot as plt

# Crea un grafico a dispersione dei dati utilizzando le colonne Età e Voto
plt.scatter(df['Età'], df['Voto'], c=df['Cluster'], cmap='viridis')
plt.xlabel('Età')
plt.ylabel('Voto')
plt.show()

Il grafico dovrebbe mostrare i due cluster in colori diversi, in base all'etichetta assegnata dal modello di K-means. In questo modo, è possibile visualizzare visivamente le caratteristiche dei due cluster e scoprire eventuali pattern o relazioni interessanti.


Questo è solo un esempio di come utilizzare K-means per eseguire un'analisi di cluster con Python. Naturalmente, ci sono molti altri aspetti da considerare nell'utilizzo di K-means, come ad esempio la scelta del numero di cluster ottimale, la selezione delle caratteristiche da utilizzare per il clustering, o la valutazione della qualità dei cluster ottenuti. Tuttavia, spero che questo esempio ti abbia fornito un'idea di come utilizzare K-means in Python e ti abbia ispirato a esplorare ulteriormente questo algoritmo.


Conclusione

In conclusione, K-means è un algoritmo di clustering molto popolare e versatile che viene utilizzato in diverse aree, come il marketing, la finanza, la biologia e molte altre. Basato sulla minimizzazione di una funzione di costo che misura la somiglianza degli oggetti all'interno di ciascun cluster, K-means viene eseguito iterativamente aggiornando i centroidi come la media degli oggetti assegnati al cluster. In questo articolo, abbiamo visto come utilizzare K-means per eseguire un'analisi di cluster con Python, utilizzando un semplice esempio di dataset fittizio su degli studenti e i loro voti. Spero che questo articolo ti sia stato utile e ti abbia fornito una buona comprensione della teoria e dell'utilizzo di K-means.


Grazie per aver letto questo articolo!

Se ti è piaciuto e vuoi rimanere aggiornato sui nostri contenuti, ti invitiamo a iscriverti al nostro sito. In questo modo potrai ricevere notifiche ogni volta che pubblichiamo nuovi articoli e rimanere sempre informato sui nostri contenuti. Grazie ancora e a presto!


PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online

Dataset Gratis

più di 150o dataset

Ebook Gratis

più di 10 libri da leggere

Editor Gratis

un editor python online

Progetti Gratis

più di 25 progetti python

App Gratis

4 servizi web con I.A.

Unisciti Ora a oltre
1.000.000
di lettori e appassionanti d'I.A.

Tutto ciò che riguarda l'intelligenza Artificiale, in unico posto, in italiano e gratis.

MEGLIO DI COSI' NON SI PUO' FARE

Dopo l'iscrizione riceverai diversi Regali

VUOI SCRIVERE ARTICOLI INSIEME A NOI.

Grazie

bottom of page