Mappe auto-organizzanti
Mappe auto-organizzanti (SOM) sono una forma non supervisionata di Machine Learning che può essere utilizzata per raggruppare dati con molte funzionalità. Il SOM non solo raggruppa i tuoi dati, ma li "mappa" anche su una dimensione inferiore (di solito due dimensioni) in modo da poter visualizzare più facilmente i cluster.
Tradizionalmente, le SOM sono spiegate come una forma di rete neurale artificiale in cui le caratteristiche sono input e i cluster sono output. Ma praticamente tutto su come viene formato e strutturato un SOM diverso dalle tradizionali reti neurali feedforward, anche se alcuni termini sono gli stessi. Quindi, se stai iniziando con una tabula rasa per quanto riguarda le reti neurali, sarai comunque in grado di seguirlo. 
Per semplificare le cose, definirò alcuni termini e cosa significano in anticipo:
Nodo . Li chiamiamo nodi perché prendiamo in prestito termini dalle reti neurali, ma i nodi nelle SOM rappresentano i centri di ciascuno dei nostri cluster. Il numero di nodi che hai è il numero di cluster che avrai.
Il peso . Prendiamo anche in prestito il termine peso dalle reti neurali, ma i pesi nelle SOM sono diversi. I pesi rappresentano la posizione spaziale del nodo (come in K-Means abbiamo i centri dei cluster). I pesi avranno la stessa dimensione dei nostri vettori di dati.
Quartiere . Il vicinato di un nodo è costituito da tutti i nodi che gli sono sufficientemente vicini. Quanto vicino è "sufficientemente" vicino cambierà mentre addestriamo il nostro SOM.
Tasso di apprendimento . Il tasso di apprendimento riflette quanto cambieremo i pesi dei nostri nodi su ogni iterazione. Tassi di apprendimento elevati significano che i nostri pesi potrebbero fluttuare selvaggiamente. Tassi di apprendimento molto bassi significano che i nostri pesi non cambieranno molto dai loro valori iniziali.
Reticolo/mappa. La disposizione/griglia dei nodi nella nostra mappa.

SOM ad apprendimento incrementale
Per darti un'idea più generale di cosa fanno le SOM, inizieremo esaminando le SOM addestrate iterativamente, che ci permetterà di vedere uno per uno ogni passaggio nella creazione delle SOM. Questo non è il metodo che JMP implementa. Per essere efficiente dal punto di vista computazionale, JMP addestra i suoi SOM con il metodo batch, che vedremo di seguito.
Panoramica . Ci sono cinque passaggi principali per addestrare una SOM in modo iterativo:
- Inizializzare i pesi dei nodi SOM. Questo può essere fatto in modo casuale oppure possono essere scelti pesi iniziali particolari in modo che siano distribuiti in modo efficiente su tutti i possibili valori di input (cosa che fa JMP).
- Scegliere un punto dati casuale dal tuo set di dati.
- Calcola a quale nodo è più vicino il punto dati . Possiamo farlo calcolando la distanza tra il nostro punto dati e il peso di ciascun nodo. Il nodo più vicino è chiamato il Miglior unità corrispondente ( BMU in breve).
- Una volta che conosciamo il BMU, calcoliamo quali nodi sono nelle vicinanze della BMU . In altre parole, quali nodi sono sufficientemente vicini nella mappa alla BMU.
- Noi aggiornare il peso del BMU e tutti i suoi vicini in modo che i loro pesi siano più simili al nostro punto dati. In sostanza, stiamo adattando meglio i nostri cluster ai nostri dati. I nodi più lontani dalla BMU vengono modificati meno dei nodi vicini alla BMU (e alla BMU stessa).
Ripetiamo i passaggi da 2 a 5 finché non abbiamo raggiunto il numero massimo di iterazioni o il peso dei nostri nodi smette di cambiare.
In profondità . Diamo uno sguardo più approfondito ai passaggi 3-5 per capire cosa sta succedendo in modo più intuitivo.
Prima di iniziare, non lasciare che la matematica ti impedisca di leggere questa sezione . Ti mostrerò le formule, ma va bene se non capisci tutta la matematica, purché tu conosca l'idea generale dietro perché usiamo questa matematica.
Trovare il BMU . Esistono molti modi per calcolare la distanza tra due vettori n-dimensionali; comunemente con le SOM, potresti vedere misure come Distanza euclidea o Distanza coseno.


In questo caso useremo la distanza euclidea. Per calcolare il BMU, calcoliamo la distanza euclidea tra il nostro vettore di dati selezionato e ciascuno dei vettori di peso per i nostri nodi. Il BMU ha la distanza più piccola.
Calcolo dei quartieri . L'aggiornamento di più nodi/centri cluster separa le SOM da metodi più semplici come K-Means. Non solo cambieremo il peso del nostro BMU per essere più vicino al vettore di dati, ma cambieremo anche i nodi che riteniamo sufficientemente vicini al BMU.
I nodi sono considerati in un quartiere di BMU se si trovano entro un certo raggio di BMU. In altre parole, se un nodo è all'interno di una circonferenza di raggio, r , centrato presso il BMU, è considerato un vicino.
All'inizio, vogliamo usare un quartiere grande e cambiare molti nodi. Ma, col passare del tempo, vogliamo che i nostri quartieri diventino più piccoli in modo da poter fare un po' più di "messa a punto" del nostro SOM. Pensa a come, quando si carteggia qualcosa, spesso si inizia con carta vetrata a grana grossa e si arriva a una carta vetrata a grana più fine.
Matematicamente, possiamo raggiungere questo obiettivo usando una formula per il raggio del nostro quartiere, r , che dipende dal tempo e si riduce man mano che continuiamo ad addestrare il nostro SOM. Alla fine, il quartiere sarà così piccolo che conterrà solo il BMU.
Aggiornamento dei pesi dei nodi . Una volta che sappiamo quali pesi dei nodi vogliamo aggiornare, calcoliamo quanto cambiarli. I pesi dei nodi più vicini al BMU cambieranno *più*, e i nodi che si trovano ai margini del nostro quartiere cambieranno molto poco. Ma tutti i pesi dei nodi verranno avvicinati al vettore di dati corrente.
Lo facciamo usando questa formula (non preoccuparti, ti guiderò attraverso le diverse parti tra un momento):

Le W rappresentano il peso del nodo. W(t+1) è il nostro aggiornato peso, W(t) è il nostro attuale il peso. Se semplifichiamo per un momento l'ultima parte del lato destro, possiamo vedere che il nuovo peso aggiornato è il nostro vecchio peso moltiplicato per alcuni regolazione .

(V(t) - W(t)) è la distanza tra il nostro vettore di dati e il peso del nodo corrente. Ciò mostra che la nostra regolazione dipenderà dalla distanza tra il vettore di dati e il nodo.

L(t) è il tasso di apprendimento. Proprio come la nostra funzione di quartiere (in realtà ESATTAMENTE come la nostra funzione di raggio di quartiere...), il nostro tasso di apprendimento inizia con un valore relativamente grande, , e si riduce nel tempo (la parte esponenziale lo fa per noi.)

Quando iniziamo ad addestrare il nostro SOM per la prima volta, il nostro tasso di apprendimento è alto, ma nel tempo vogliamo che i pesi dei nostri nodi siano più stabili, quindi riduciamo il nostro tasso di apprendimento.

Non solo il tasso di apprendimento sta diminuendo volta , ma anche la modifica ai pesi dei nostri nodi sta diminuendo man mano che il nodo ottiene ulteriore dal nostro BMU.
è un kernel gaussiano, che rappresenta matematicamente questo decadimento. ( dist è la distanza tra il nodo che stiamo modificando e la BMU nella mappa.)

Per un dato raggio, r(t), il kernel gaussiano avrà questa forma:
Quando la distanza tra il nodo che stiamo aggiornando e la BMU è grande, sarà piccolo. Al contrario, quando il nodo che stiamo aggiornando è vicino al BMU, sarà più grande.
Abbiamo finalmente decostruito l'intera formula!

Revisionare:
W(t) è il peso corrente di un nodo.

fa sì che i nodi che sono più lontani dalla BMU vengano modificati meno rispetto ai nodi vicini alla BMU (e alla BMU stessa).
L(t) è il nostro tasso di apprendimento in decrescita. Con il passare del tempo, stiamo "perfezionando" e apportando modifiche più piccole rispetto a quelle all'inizio dell'allenamento.
V(t) - W(t) è la distanza tra il vettore di dati e il peso del nodo (entrambi n-dimensionali). Maggiore è la distanza, più le cose cambieranno.
Se sei arrivato così lontano, ti meriti una pausa! Abbiamo esaminato il modo in cui i SOM vengono addestrati in modo iterativo. Questo ci ha mostrato le idee generali che rendono uniche le SOM: ovvero il modo in cui aggiorniamo i pesi di più nodi a seconda di tempo, distanza dalla BMU e distanza tra il vettore di dati e il peso del nodo.
Se hai mai letto di SOM altrove, la cosa di cui le persone si entusiasmano è che i SOM "preservano la topologia", il che è solo un modo elegante per dire che i nodi che sono vicini nello spazio multidimensionale saranno vicini nel nostro SOM griglia una volta che l'abbiamo allenato. Questo ci aiuta a visualizzare i nostri dati utilizzando la griglia SOM poiché è facile rappresentare graficamente le cose in due dimensioni... ma molto più difficile in più dimensioni.
L'apprendimento dell'addestramento SOM iterativo è utile per comprendere queste proprietà, ma non è efficiente dal punto di vista computazionale. Ecco perché JMP utilizza il lotto metodo di allenamento per eseguire effettivamente i calcoli SOM.
Apprendimento in batch SOM
Questo algoritmo è quello descritto nel sito Web di JMP. Invece di addestrare il nostro SOM un vettore di dati alla volta, possiamo usare tutti i vettori di dati contemporaneamente!
Ecco i passaggi:
- Inizializzare i pesi dei nodi SOM (questo è lo stesso nel metodo iterativo)
- Tutto in una volta, calcolare le BMU per ogni vettore di dati nel nostro set di addestramento.
- Calcola i nuovi pesi dei nodi utilizzando questa formula:

è il numero di vettori di dati la cui BMU è il nodo j,
è la media di tutti quei vettori di dati e è la funzione di vicinato che decide quali nodi vengono modificati e di quanto. È simile al
nel nostro algoritmo di addestramento incrementale.
4. Ripetere 2 e 3 finché il nostro SOM non è convergente.
La matematica può essere più difficile da seguire quando accade tutta in una volta, ma la premessa di base dell'algoritmo Batch Learning è che invece di aggiornare i nostri nodi in risposta a uno vettore di dati, li aggiorniamo in risposta a tutto i vettori di dati in una volta (sorta come K-Means…). E fortunatamente per te, questo metodo accelererà spesso il tempo necessario a JMP per addestrare il tuo SOM.
In JMP
In JMP, l'opzione SOM si trova nel menu Medie K. Usiamo un SOM per raggruppare alcuni Fast Food Hamburger di vari ristoranti americani. Vai a Analizza > Clustering > Medie K . Verrà visualizzata la finestra Cluster K-Means. Fare clic e trascinare tutte le variabili che si desidera utilizzare su Y casella e fare clic OK .
All'interno del Pannello di controllo, c'è un menu a discesa per Metodo. Scegliere Mappa auto-organizzativa . Da qui puoi scegliere la dimensione della tua griglia. Faremo 2x2, che ci dà quattro nodi disposti in una forma rettangolare. Clic ANDARE .
Il nostro output ci mostra automaticamente i mezzi di ciascuno dei nostri quattro cluster. Possiamo salvare queste assegnazioni di cluster andando sul triangolo rosso sotto il nostro menu Griglia SOM e selezionando " Salva cluster ”. Nello stesso menu, possiamo anche selezionare " Biplot ” per vedere una rappresentazione visiva del nostro SOM. JMP traccia i nodi/cluster in base ai primi due componenti principali. Qui, sembra che il Cluster 1 (in alto) sia abbastanza lontano dagli altri tre. Possiamo verificarlo più avanti in Graph Builder.

Anche esaminando alcune delle nostre variabili, possiamo iniziare a capire perché il Cluster 1 era così diverso. Non ha assolutamente proteine. Se osserviamo il nostro set di dati, possiamo vedere che gli elementi nel Cluster 1 tendono ad essere dessert. 
Il Cluster 2, invece, è ricco di calorie, proteine e grassi! Potresti voler fare attenzione a quegli oggetti se stai cercando di rimanere sveglio a lungo dopo averli mangiati.
Conclusione
Le mappe autoorganizzanti sono uno strumento utile per raggruppare i tuoi dati costruendo una mappa che prende dati potenzialmente altamente dimensionali e li mappa in una forma 2D molto più gestibile. In JMP , le SOM sono facili da implementare quanto le medie K (anche se la matematica dietro è molto più complicata), quindi cosa hai da perdere provandole?
Mappe auto-organizzanti (SOM) sono una forma non supervisionata di Machine Learning che può essere utilizzata per raggruppare dati con molte funzionalità. Il SOM non solo raggruppa i tuoi dati, ma li "mappa" anche su una dimensione inferiore (di solito due dimensioni) in modo da poter visualizzare più facilmente i cluster.
Re: Mappe auto-organizzantiCiao Chelsea
hai un esempio su come utilizzare il SOM in JMP per la riduzione della dimensionalità?
In genere utilizzo SOM per il clustering, ma so che può essere utilizzato anche per ridurre il numero di predittori.
Grazie
Felice