Il clustering: come l’AI apprende senza troppi “preconcetti”

Il clustering: come l’AI apprende senza troppi “preconcetti”

Condividi con i tuoi amici...

Proprio come un essere umano che, senza troppi pregiudizi o preconcetti, può imparare cose nuove e interessanti, così attraverso il clustering, l’AI può scoprire autonomamente similitudini e strutture all’interno di un ampio set di dati, senza alcun suggerimento esterno. Grazie al clustering, l’AI può identificare schemi, formare raggruppamenti e ottenere una profonda comprensione della struttura dei dati, consentendo di sviluppare una percezione che va oltre ciò che si conosce già. In questo modo, il clustering fornisce un modo potente ed efficace per addestrare l’AI a riconoscere autonomamente relazioni e formare classi, senza l’intervento umano.

Alla ricerca di strutture nascoste

I modelli di clustering sono utilizzati per raggruppare insiemi di dati simili tra loro. Il clustering è in generale una tecnica di apprendimento non supervisionato e può essere usato in diversi ambiti, come la classificazione, la segmentazione di immagini, il riconoscimento di pattern e molte altre applicazioni.

L’apprendimento non supervisionato si riferisce a una classe di tecniche di machine learning in cui un algoritmo viene addestrato senza un set di dati di addestramento pre-etichettato o supervisionato. Invece, l’algoritmo cerca di identificare i pattern, le relazioni e le strutture nei dati senza alcuna guida esterna. L’obiettivo dell’apprendimento non supervisionato è di scoprire informazioni nascoste e di creare raggruppamenti di dati simili, identificare anomalie, ridurre la dimensione dei dati e altro ancora.

Nel caso del clustering, il modello non prende avvio da categorie o classi già definite ma le forma strada facendo a partire da alcuni input dati al programma che descrivono gli oggetti da classificare. Questi input non sono altro che caratteristiche di tali oggetti.

Questi modelli sono utilizzati in una vasta gamma di applicazioni, dal marketing alla medicina, allo sviluppo di nuove tecnologie in diversi campi.

La rappresentazione matematica

Gli oggetti da classificare vengono rappresentati da punti in uno spazio multidimensionale. Ogni dimensione di questo spazio rappresenta una tipo di caratteristica che gli oggetti in questione possono avere. Le distanze tra due punti stabiliscono il grado di similitudine tra i due oggetti da essi rappresentati.

I punti possono rappresentare oggetti quali immagini, documenti, sensori, prodotti, pazienti, clienti, ecc. In pratica, i punti sono un insieme di attributi o caratteristiche che descrivono un oggetto o un individuo preso in considerazione.

La distanza tra due punti in una qualche rappresentazione di dati (ad esempio, una matrice o un grafo) è una misura numerica che rappresenta la loro somiglianza o differenza. Essa dipende dalla rappresentazione in uso e dall’obiettivo pratico del modello.

La scelta dei punti dipende dall’applicazione e dalla tipologia di input data. Ad esempio, se si sta lavorando con immagini, i punti possono rappresentare le immagini stesse o le feature estratte dalle immagini (ad esempio, le texture o le forme). Invece, se si sta lavorando con dati sensoriali, i punti potrebbero rappresentare segnali acquisiti da sensori diversi. Infine, in ambito medico, i punti potrebbero rappresentare informazioni cliniche di pazienti.

Ogni tipo di attributo del punto rappresenta una dimensione dello spazio in cui si trova il punto stesso.

Il numero di dimensioni in uno spazio può variare, a seconda dell’applicazione e della natura del problema. Ad esempio, in un’immagine ogni pixel può essere considerato come una dimensione dello spazio, mentre in un problema di analisi dati si possono considerare solo alcune variabili rilevanti e quindi avere meno dimensioni.

Le dimensioni possono essere di differenti tipi, come ad esempio numeriche, categoriche, booleane e altre ancora. Le dimensioni numeriche rappresentano valori continui o discreti, mentre quelle categoriche rappresentano valori che sono suddivisi in categorie. Le dimensioni booleane rappresentano valori booleani (vero/falso, 0/1).

La scelta delle dimensioni è importante perché influisce sulla complessità e sulla precisione del modello di clustering. Una buona scelta di dimensioni può aiutare a identificare cluster che corrispondono a classi di oggetti simili.

Un esempio

Consideriamo le parole “casa”, “cane” e “auto”. Possiamo rappresentare ogni parola utilizzando un vettore di dimensione 3, in cui ogni dimensione rappresenta una caratteristica della parola. Ad esempio, potremmo definire la lunghezza della parola, la frequenza di utilizzo nelle lingue, e la presenza di lettere specifiche come “a” o “o”.

Quindi, per “casa” potremmo avere un vettore di [4, 0.0005, 2], dove “4” rappresenta la lunghezza della parola, “0.0005” la frequenza di utilizzo, e “2” indica la presenza della lettera “a” e “o”.

Per “cane”, il vettore potrebbe essere [4, 0.001, 1], in cui la presenza della lettera “a” è sostituita dalla presenza della lettera “e”.

Per “auto“, il vettore potrebbe essere [4, 0.0008, 2], dove la presenza della lettera “a” e “o” si verifica nuovamente.

In questo caso, le dimensioni dello spazio rappresentano le caratteristiche o le proprietà delle parole come la lunghezza, la frequenza e la presenza di lettere specifiche. Queste dimensioni possono essere utilizzate per valutare la somiglianza tra le parole e quindi raggrupparle in cluster in base alle loro proprietà comuni.

Classifichiamo i clienti

Immaginiamo di avere un’azienda che vende servizi finanziari e vogliamo applicare il clustering sui nostri clienti. In questo caso, i punti rappresentano i clienti dell’azienda e le dimensioni rappresentano le caratteristiche di ogni cliente. Alcune delle possibili dimensioni potrebbero essere:

  1. Età del cliente
  2. Tipo di servizi finanziari acquistati (es. conto corrente, carta di credito, prestito)
  3. Fasce orarie in cui il cliente utilizza i servizi finanziari dell’azienda
  4. Importo medio utilizzato per ogni transazione effettuata
  5. Titolo di studio del cliente
  6. Tipo di occupazione
  7. Competenza finanziaria del cliente

Possiamo rappresentare ogni cliente con un vettore di dimensione 7, ad esempio, il primo cliente potrebbe avere le seguente caratteristiche: [35, “Conto corrente”, “dalle 14 alle 17”, 100 euro, “Laureato”, “Dipendente di un’azienda”, “Intermedio”].

In questo esempio, ogni cliente è rappresentato da una combinazione di caratteristiche che possono essere utilizzate dal modello di clustering per identificare cluster di clienti simili. Ad esempio, un cluster può contenere clienti più giovani che utilizzano servizi finanziari principalmente per la gestione delle spese quotidiane, mentre un altro cluster potrebbe contenere clienti più anziani che sono interessati agli investimenti e alle strategie finanziarie.

Traduciamo in numeri le caratteristiche

La distanza tra due vettori in uno spazio n-dimensionale può essere calcolata utilizzando diverse metriche, tra cui la distanza euclidea, la distanza di Manhattan, la distanza di Chebyshev e altre ancora. La distanza euclidea è probabilmente la metrica più comunemente utilizzata ed è definita come la radice quadrata della somma dei quadrati delle differenze tra le dimensioni dei due vettori:

d(x, y) = sqrt( (x1 – y1)2+ (x2 – y2)2 + … + (xn – yn)2 )

Per quanto riguarda le caratteristiche non numeriche, queste possono essere trasformate in numeri utilizzando una delle diverse tecniche di codifica, ad esempio, la codifica one-hot, in cui ogni categoria è rappresentata da un valore numerico (0 o 1). Ad esempio, nella dimensione “Tipo di servizi finanziari acquistati”, potremmo assegnare il valore 1 alla categoria “conto corrente” e il valore 2 alla categoria “carta di credito”.

Quando si utilizzano vettori con dimensioni eterogenee, ad esempio, quando si utilizzano sia dimensioni numeriche che non numeriche, è possibile assegnare pesi diversi alle dimensioni per tenere conto dell’importanza relativa di ciascuna. Ad esempio, potremmo dare un peso maggiore alla dimensione “Importo medio utlizzato per ogni transazione effettuata” rispetto alla dimensione “Fasce orarie in cui il cliente utilizza i servizi finanziari dell’azienda”, poiché la prima dimensione è probabilmente più importante per l’azienda dal punto di vista economico.

L’illusione di essere vicini

Quando osserviamo il cielo stellato e teniamo conto solo della loro posizione in uno spazio bidimensionale, alcune stelle ci appaiono vicine, ma in realtà potrebbero essere molto distanti tra loro a causa del fatto che stiamo trascurando la terza dimensione. Similmente se si trascura una dimensione importante nel definire i punti, il clustering potrebbe raggruppare insieme punti che in realtà sono molto lontani tra loro nella dimensione trascurata.

La definizione della dimensionalità dello spazio e degli attributi che definiscono il punto è un aspetto molto importante nella tecnica di clustering. Gli attributi che definiscono il punto devono essere completi, nel senso che devono essere tutti e solo quelli necessari e sufficienti per descrivere adeguatamente il punto in questione.

Scegliamo le caratteristiche giuste

Ci sono dei criteri per scegliere le caratteristiche che definiranno le dimensioni dello spazio. In generale, bisogna selezionare le caratteristiche che sono rilevanti per il problema che si sta affrontando e che possono aiutare a separare i dati in cluster distinti. In altre parole, le caratteristiche dovrebbero essere significative dal punto di vista degli obiettivi dell’applicazione.

Per esempio, per quanto riguarda la similitudine tra parole, queste caratteristiche possono variare a seconda dell’obiettivo del modello. È possibile utilizzare sia la somiglianza formale che quella semantica tra le parole per rappresentare la similitudine tra di esse. Ad esempio, per rappresentare la somiglianza semantica tra le parole, è possibile utilizzare tecniche come le Word Embeddings, che derivano la rappresentazione numerica delle parole in base al loro contesto semantico.

Inoltre, una possibile tecnica per selezionare le migliori caratteristiche del problema di clustering, consiste nell’analisi delle componenti principali (PCA). La PCA riduce la dimensionalità dei dati eliminando le caratteristiche meno significative in modo da conservare solo le più importanti. Questa tecnica è utile quando ci sono tante caratteristiche e maggiori dimensioni implicano maggiori rischi di overfitting.

Le tecniche di Word Embeddings

Le tecniche di Word Embeddings si basano sulla creazione di rappresentazioni vettoriali dense di parole in un corpus di testo. Queste rappresentazioni sono utilizzate per identificare la somiglianza semantica tra le parole e per compiere operazioni matematiche con le parole.

Il processo di creazione di queste rappresentazioni vettoriali è basato sull’analisi del contesto in cui le parole appaiono nel corpus di testo. Viene utilizzata una rete neurale per identificare i pattern di co-occorrenza tra le parole e per creare una rappresentazione numerica di ciascuna parola. Questa rappresentazione è solitamente rappresentata come un vettore di numeri reali di dimensione fissa (ad esempio, 300 o 500 dimensioni).

Una volta creata la rappresentazione vettoriale delle parole nel corpus, è possibile utilizzare tecniche di clustering e di classificazione per identificare gruppi di parole simili e per creare modello di previsione del testo. Ad esempio, è possibile utilizzare le rappresentazioni vettoriali delle parole per creare un modello di classificazione automatica dei sentimenti, dove il modello viene addestrato per identificare il sentimento positivo o negativo di una determinata frase o testo.

Le parole come vettori

I numeri reali che compongono il vettore di una parola rappresentano le sue caratteristiche semantiche e sintattiche, ossia le sue relazioni con le altre parole nel corpus di testo. Questi numeri rappresentano in qualche modo il “significato” della parola, ma in una forma numerica che può essere utilizzata dalle macchine per compiere operazioni matematiche.

In particolare, il significato di ogni elemento del vettore dipende dal modello utilizzato per generarlo, ma in genere le prime componenti sono associate a caratteristiche sintattiche della parola, mentre le altre componenti rappresentano il contesto semantico in cui la parola appare nel corpus di testo. Ad esempio, alcune componenti possono rappresentare i concetti di “cibo”, “animale”, “colore”, “emozione” etc.

L’obiettivo delle tecniche di Word Embeddings è di creare vettori di parole in cui parole simili sono rappresentate da vettori simili. Questo significa che le parole che hanno significati simili o che compaiono spesso insieme nel contesto saranno rappresentate da vettori che sono molto vicini tra loro nello spazio vettoriale.

Senza “preconcetti” o nessuna base vettoriale precostituita

l’approccio utilizzato dalle tecniche di Word Embeddings non prevede l’utilizzo di parole di riferimento o di una base vettoriale predefinita. Invece, il vettore di una parola viene creato in modo completamente automatico, analizzando il contesto in cui la parola appare all’interno del corpus di testo.

In particolare, il modello di Word Embeddings fa uso di una rete neurale che viene addestrata per identificare le relazioni semantiche tra le parole nel corpus. Durante l’addestramento, la rete neurale modifica i pesi tra le unità in modo da massimizzare la rappresentazione delle relazioni semantiche tra le parole. Questo processo crea implicitamente una base vettoriale in cui ogni vettore è generato in relazione agli altri vettori nel corpus di testo.

Supponiamo di avere un corpus di testo contenente diverse frasi, tra cui: “Il cane corre nel prato”, “Il gatto dorme sul divano”, “Il cane abbaia al gatto”.

In questo corpus, la parola “cane” e la parola “gatto” sono strettamente associate e compaiono spesso insieme. Le parole “corre”,abbaia” e “dorme”, invece, sono associate con uno specifico animale.

Il modello di Word Embeddings utilizza queste informazioni per creare rappresentazioni vettoriali delle parole nel corpus. Ad esempio, il vettore per la parola “cane” potrebbe essere:

[0.2, 0.3, -0.1, 0.1, 0.5, -0.2, …]

I numeri reali nel vettore rappresentano le caratteristiche semantiche e sintattiche della parola “cane”. Ad esempio, la prima componente potrebbe essere associata ai verbi di movimento, come “corre” e “abbaia”, mentre la quinta componente potrebbe essere associata alla categoria animale.

Se ora confrontiamo i vettori del cane e del gatto, ci aspetteremmo di vedere che sono molto simili, visto che le due parole sono associate alla medesima categoria semantica di “animale”. D’altra parte, il vettore per la parola “divano” dovrebbe essere molto diverso, dal momento che questa parola è associata a un contesto totalmente diverso rispetto a cani o gatti.

In questo modo, le tecniche di Word Embeddings permettono di creare rappresentazioni semantiche delle parole, che possono essere utilizzate per capire le relazioni tra parole e frasi all’interno di un corpus di testo.

Attenzione, il modello di Word Embeddings non prevede alcuna etichettatura manuale o predefinita delle parole o delle categorie semantiche. Al contrario, i vettori di parole vengono creati in modo completamente automatizzato, analizzando il contesto in cui le parole compaiono all’interno del corpus di testo.

In particolare, il modello di Word Embeddings utilizza una rete neurale per identificare le correlazioni tra le parole nel corpus, producendo rappresentazioni dense delle parole. In questo processo, le relazioni semantiche tra le parole emergono in modo spontaneo, senza che sia richiesta alcuna etichettatura predefinita.

Per esempio, in un corpus di testo contenente parole come “cane”, “gatto”, “uccello” e “pesce”, il vettore di ogni parola viene creato in modo implicito, catturando le relazioni semantiche e context-specific tra le parole. Il modello è in grado di individuare che le prime tre parole sono animali terrestri, mentre l’ultima è un animale acquatico, senza che siano richiesti input esterni per definire queste categorie semantiche.

Quando la rete neurale del modello elabora le parole del corpus, le rappresenta come vettori numerici nello spazio vettoriale. Nel corso dell’addestramento, il modello modifica i pesi della rete neurale per massimizzare la rappresentazione delle relazioni semantiche tra queste parole.

Dunque, il modello di Word Embeddings è in grado di identificare relazioni semantiche tra le parole in modo autonomo, utilizzando solo le informazioni contenute nel corpus di testo. Se ad esempio la parola “terra” compare spesso vicino alle parole “cane”, “gatto” e “uccello” durante la fase di addestramento, il modello imparerà a considerare queste parole nella categoria “animale terrestre”. Allo stesso tempo, se la parola “acqua” compare spesso vicino alla parole “pesce” durante l’addestramento, il modello imparerà a legare questa parola a quella di “animale acquatico”.

In definitiva, alla base delle tecniche di Word Embeddings c’è l’idea che le parole che compaiono spesso vicine l’una all’altra condividono un significato comune e si relazionano semanticamente. Il modello elabora queste informazioni di relazione tra le parole e costruisce vettori che le tengono in considerazione, rendendo la comprensione del significato delle parole sempre più precisa.

Alcuni modelli di clustering più utilizzati

Tra i modelli di clustering più comuni troviamo:

  • K-means: questo è uno dei modelli di clustering più utilizzati. Si tratta di una tecnica di partizionamento in cui i dati vengono divisi in k cluster. Il modello utilizza la distanza tra i punti per calcolare la somiglianza tra esse e quindi assegnare i dati al cluster più vicino al centro.
  • DBSCAN (Density-Based Spatial Clustering of Applications with Noise): questo modello si basa sulla densità dei punti nei dati. In questo caso i cluster sono generati in modo automatico attraverso l’analisi della densità spaziale dei dati. In questo modo è possibile identificare cluster di varie forme e dimensioni.
  • Hierarchical Clustering: questo modello di clustering suddivide i dati gerarchicamente in gruppi. In questo caso, il cluster viene formato in base alla distanza tra i punti e la gerarchia viene creata partendo dalle coppie di punti più vicini e unendo i cluster adiacenti fino a ottenere un singolo cluster.
  • Gaussian Mixture Models: questo modello è basato sulla distribuzione gaussiana. In questo caso, i dati sono divisi in cluster in base alla similarità tra le loro distribuzioni gaussiane. Ogni cluster è rappresentato da una combinazione lineare di gaussiane.

Approfondiamo alcuni aspetti dei primi due modelli

Algoritmo k-means

Il metodo k-means inizia selezionando casualmente o con altri metodi k centroidi. Successivamente, assegna ciascun punto dati al cluster la cui centroide è più vicina, utilizzando una misura di distanza euclidea o altre misure di distanza. Dopo l’assegnazione, i centroidi dei cluster vengono ricalcolati come la media dei punti appartenenti a ciascun cluster. Questo processo di assegnazione e aggiornamento dei centroidi viene ripetuto fino alla convergenza dei centroidi o al raggiungimento di un criterio di terminazione specificato.

Un aspetto cruciale nel processo dell’algoritmo k-means è la scelta del numero di cluster k. La selezione corretta di k dipende dalla natura dei dati e dagli obiettivi dell’analisi. Spesso vengono utilizzate tecniche come l’analisi del gomito o l’indice di validità del clustering per aiutare a determinare il valore ottimale di k.

L’algoritmo k-means presenta alcune limitazioni. Ad esempio, può essere influenzato dall’inizializzazione dei centroidi e può convergere a minimi locali invece della soluzione ottimale. Inoltre, k-means funziona meglio con cluster di forma sferica e dimensioni simili. Se i dati contengono cluster di forma irregolare o di dimensioni diverse, potrebbe essere necessario utilizzare altri algoritmi di clustering come il DBSCAN o il clustering gerarchico.

Prima di applicare l’algoritmo k-means, è spesso consigliabile trasformare o normalizzare i dati per garantire che tutte le variabili abbiano lo stesso peso e un’importanza comparabile.

L’algoritmo k-means trova ampio utilizzo in diverse applicazioni, come l’analisi dei dati, l’apprendimento automatico, l’elaborazione delle immagini, il clustering di documenti e molto altro. Può essere utilizzato per estrarre informazioni rilevanti dai dati, identificare pattern o segmentare gruppi omogenei. Per implementare l’algoritmo k-means, è possibile utilizzare librerie di machine learning come scikit-learn in Python o altre risorse disponibili in vari linguaggi di programmazione.

Esempio di codice

Il seguente codice genera dei clusters a partire da una tabella SQLITE in cui sono stati vettorializzati degli elementi.

Ogni riga della tabella rappresenta un punto (vettore), mentre le colonne contengono gli attributi o componenti del vettore (A1, A2, A3, …).


import sqlite3
import numpy as np
from sklearn.cluster import KMeans

# Lettura dei dati dal database SQLite
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM tabella1')
data = cursor.fetchall()
conn.close()

# Conversione dei dati in un array numpy
data = np.array(data)

# Definizione del numero di cluster desiderato
num_clusters = 10

# Creazione e addestramento del modello di cluster
kmeans = KMeans(n_clusters=num_clusters)
kmeans.fit(data)

# Ottenere le etichette dei cluster per ogni punto

labels = kmeans.labels_

# Stampa delle etichette dei cluster
for i in range(len(data)):
    print("Punto", i, "appartiene al cluster", labels[i])
    if i == 10:
        break

DBSCAN

DBSCAN (Density-Based Spatial Clustering of Applications with Noise) è un’algoritmo di clustering ampiamente utilizzato nell’analisi dei dati. A differenza degli algoritmi di clustering come k-means, DBSCAN non richiede la specifica di un numero fisso di cluster, ma è in grado di identificare autonomamente la forma e il numero dei cluster basandosi sulla densità dei punti dati.

Di seguito sono riportati alcuni aspetti importanti di DBSCAN da approfondire:

L’idea principale di DBSCAN è che un cluster è una regione in cui i punti dati sono densamente concentrati. L’algoritmo identifica i punti core, che sono circondati da un numero minimo di punti (definito come parametro epsilon) per essere considerati parte del cluster. I punti che non soddisfano questa condizione sono considerati rumore o punti di confine.

DBSCAN inizia selezionando casualmente un punto dati e identificando tutti i punti presenti nel suo intorno (definito come una sfera con raggio epsilon). Se il numero di punti nell’intorno supera una soglia minima prefissata (definita come parametro minPts), viene formato un cluster. Successivamente, l’algoritmo si espande in modo ricorsivo per identificare tutti i punti core raggiungibili dal cluster iniziale.

L’algoritmo richiede due parametri principali: epsilon (eps) e minPts. Il valore eps definisce la distanza massima tra due punti per considerarli vicini. Il valore minPts rappresenta il numero minimo di punti necessari per formare un cluster. La scelta appropriata di questi parametri dipende dalla densità dei dati e dal numero e dalla forma dei cluster previsti.

DBSCAN offre alcuni vantaggi rispetto ad altri algoritmi di clustering. È in grado di identificare cluster di diverse forme e dimensioni, è robusto al rumore e non richiede la specifica del numero di cluster in anticipo. Inoltre, DBSCAN è efficiente nell’elaborazione di grandi quantità di dati. La scelta dei parametri eps e minPts può essere determinante per ottenere risultati significativi e può richiedere un’analisi esplorativa approfondita dei dati.

Anche per implementare DBSCAN, è possibile utilizzare librerie di machine learning come scikit-learn in Python o altre risorse disponibili in diversi linguaggi di programmazione. Esistono anche tutorial ed esempi online che possono aiutare a comprendere meglio l’implementazione e le applicazioni di DBSCAN.”

Esempio di codice che usa DBSCAN
import sqlite3
import numpy as np
from sklearn.cluster import DBSCAN

# Lettura dei dati dal database SQLite
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM tabella1')
data = cursor.fetchall()
conn.close()

# Conversione dei dati in un array numpy
data = np.array(data)

# Creazione e addestramento del modello di cluster con DBSCAN
eps=5
min_samples=10
dbscan = DBSCAN(eps=eps, min_samples=min_samples)
dbscan.fit(data)

# Ottenere le etichette dei cluster per ogni punto

labels = dbscan.labels_

# Stampa delle etichette dei cluster
for i in range(len(data)):
    print("Punto", i, "appartiene al cluster", labels[i])
    if i == 10:
        break