POLITECNICO DI TORINO III Facoltà di Ingegneria dell’Informazione Corso di Laurea Magistrale in Ingegneria Informatica Tesina di Intelligenza Artificiale Clustering su dati climatici usando Kohonen map Professore: prof. Elio Piccolo Studente: Pietro Martorana A.A. 2014/2015 Introduzione Nella breve trattazione che segue si descriveranno le scelte architetturali e metodologiche adottate al fine di implementare un sistema software di clustering di dati meteo relativi al Nord America considerando gli anni 2011, 2012, 2013 e 2014 singolarmente e complessivamente. In particolare, per poter clusterizzare i dati meteorologici nei singoli anni e nel complessivo dei 4 anni considerati, si useranno le mappe di Kohonen e si considereranno 5 fattori principali: temperatura massima giornaliera media per ogni mese, temperatura minima giornaliera media per ogni mese, totale delle precipitazioni per ogni mese, totale neve caduta per ogni mese, velocità del vento giornaliera media per ogni mese. I dati sono stati prelevati dal servizio ftp del sito www.ncdc.noaa.gov. Il Clusterizzatore e le mappe di Khonen Un sistema di clusterizzazione ha solitamente il compito di fornire all’utente finale una “suddivisione” del mondo reale in classi aventi caratteristiche omogenee. L’obiettivo della clusterizzazione è di creare un modello che sia in grado, dato un pattern di input, di assegnare tale pattern ad un cluster specifico. In particolare usando le mappe di Khonen per fare clusterizzazione (o mapping), quello che si avrà saranno una matrice di neuroni di output (N = numero di neuroni di output), ed un certo numero M di neuroni di input totalmente connessi agli output tramite la matrice di pesi “W”. La caratteristica principale delle mappe di Khonen è l’autoapprendimento, ciò implica che usando dei pattern di input di addestramento (che possono essere gli stessi che successivamente si useranno per il mapping), le mappe di Khonen aggiornano la matrice dei pesi autonomamente. Una volta conclusa la fase di autoapprendimento basterà prendere i pattern da clusterizzare, immetterli in input ed osservare quale neurone di output è più “vicino” al pattern di input. Le formule usate tipicamente sono: ο· Fase di addestramento o Calcolo della distanza dei nodi di input dai nodi output con la distanza 2 euclidea classica ο¨ ππ = π−1 π=0 (π₯π π‘ − π€ππ (π‘)) o Aggiornamento dei pesi tramite una formula ripetuta un certo numero di volte considerando il nodo j* con la minore distanza ο¨ π€ππ π‘ + 1 = π€ππ π‘ + πΌ π‘ ∗ π(π·πΌπ π, π ∗ ) ∗ (π₯π (π‘) − π€ππ (π‘))) ο· Fase di mapping o Calcolo della distanza dei nodi di input dai nodi di output e scelgo di mappare il mio input con il neurone di output che presenta la minore distanza, usando la distanza Euclidea 2 ο¨ππ = π−1 π=0 (π₯π π‘ − π€ππ (π‘)) In questo caso ho deciso di adottare le due formule sopracitate, in cui: ο· πΌ π‘ = π΄πππ₯ ∗ ( ο· π π·πΌπ π, π ∗ π΄πππ π΄ππ₯ π‘ )ππππ₯ = (1 − π2 π2 ) ο· π = π·πΌπ(π, π ∗ ) ο· π π‘ = π πππ₯ ∗ ( π πππ π πππ₯ ο· π πππ = 1 e π πππ₯ = ο· ο· ο· ο· π‘ )ππππ₯ 2 π 2 π΄πππ = 0.1 e π΄πππ₯ = 1 π = 16 ππππ₯ = 3 π = 60 Per la selezione del vicinato, cioè gli output j da considerare per calcolare l’aggiornamento dei pesi, ho deciso di controllare la π π·πΌπ π, π ∗ , se è < di zero allora sono andato fuori range massimo e quindi non aggiorno i pesi. Tmax settata a 3 significa che faccio tre iterazioni per ogni pattern di input durante l’aggiornamento dei pesi. Il Mapping dei dati climatici Per poter fare il mapping dei dati climatici, ho preso in considerazione tutte le stazioni meteorologiche relative ai 4 anni (cioè se ne è stata aggiunta qualcuna solo nel 2014 l’ho aggiunta pure) che mi permettevano di avere i dati per tutti i mesi dell’anno che stavo considerando, così da ottenere un vettore di dati da 12*5 = 60 elementi per ogni stazioni per ogni anno (5 = numero di dati climatici considerati per ogni mese tra quelli forniti). Tali dati sono stati salvati su un file in cui in ogni riga abbiamo: il numero della stazione considerata, l’anno e i 60 valori dei dati considerati. Tali vettori li ho usati per l’addestramento, cioè ognuno di essi è stato considerato una sola volta ed iterato 3 volte sulla formula di aggiornamento dei pesi. Una volta ottenuti i pesi, salvati su un file (16 righe in quanto ho 16 neuroni di output) l’addestramento è concluso, perciò si può passare alla fase di mapping. In questa seconda fase i passi sono i seguenti: ο· Per ogni pattern di input si calcola la distanza da ogni pattern di output ο· Si considera il pattern di output con la minore distanza e si salva nel DB il numero della stazione, l’anno considerato, il neurone “migliore” e la distanza relativa Avendo questi dati, quando devo visualizzare il mapping per i singoli anni, posso andare a prelevare i dati relativi ad una stazione direttamente dalla corrispondenza stazione-anno, invece per considerare il mapping per tutti gli anni ho effettuato un ragionamento sulla soluzione migliore che è il seguente: ο· Se nei vari anni una stazione è stata mappata un numero maggiore di volte su un neurone rispetto ad altri, considera quello per il mapping ο· Se non esiste questo neurone principale, considero quello con distanza minore (se sono presenti due neuroni 2 volte ciascuno, per esempio, considero la somma delle distanze e mappo la stazione con il neurone avente la somma minore) Nel caso di dati assenti, rappresentati con le lettere “M” e “T” nei vettori di dati forniti dal servizio ftp web sopracitato, non ho calcolato la distanza, cioè ho considerato che fosse irrilevante ai fini della classificazione. Nel calcolo delle distanze, e quindi dei pesi, ho adottato una normalizzazione delle varie grandezze al valore massimo corrispondente con il dato climatico considerato, cioè, per esempio, la temperatura massima tra tutte le temperature è 85.9, quindi ogni dato prelevato, lo consideravo così: π = ππππππ£ππ‘π 85.9 . Scelte architetturali Per l’implementazione del sistema software per implementare questo mapping, ho utilizzato i seguenti componenti: ο· Google Maps Api, utili per mostrare con cerchietti colorati (con colore relativo al neurone di output assegnato alla stazione corrispondente) i vari mapping ο· MySql DB, utile per salvare i dati relativi al mapping. nel caso di specie ho adottato tre tabelle: o Stations in cui ho salvato il numero della stazione meteorologica e le relative coordinate geografiche o Neu_color in cui ho salvato il numero del neurone e il colore associatogli o Clusters in cui ho salvato il numero della stazione, l’anno, il neurone mappato per quell’anno e la relativa distanza ο· Php e javascript come linguaggi per poter interagire tramite web con il DB e con le Api di Google Maps Interfaccia Utente La schermata iniziale si presenta nel modo seguente: “All years data” è in grassetto in quanto è ciò che viene mostrato all’apertura della pagina iniziale, cioè il mapping relativo a tutti e 4 gli anni considerati. Per agevolare la comprensione dei colori e quindi dei cluster, ho apposto una legenda da poter aprire in caso di necessità (cliccare su “Open Legend”): Cliccando su “Data 2011”, “Data 2012”, “Data 2013” o “Data 2014” spunterà il mapping dell’anno scelto, e la scritta sarà in grassetto come nell’esempio riportato nella figura successiva: Conclusioni Osservando le mappe nei vari anni o nel complessivo dei 4 anni, si nota come è presente una suddivisione tra varie zone climatiche con qualche piccolo dato rumoroso (qualche colore presente nelle zone dell’Alaska presente anche nella parte centrale degli USA e non solo all’estremo Nord) o qualche eccezione dovuta magari a stazioni sulle montagne o microclimi relativi. Si nota infatti che: ο· Nella zona calda, nel Sud, è presente una preponderanza di nero, viola e blu ο· Nella zona temperata, quella Centrale, sono presenti maggiormente i colori giallo e verde acceso ο· Nella zona più fredda, nel Nord, sono presenti rosso, arancione e marrone principalmente ο· Nella zona dell’Alaska sono preseti principalmente, nella zona Sud, quella più “calda”, rosso, arancione e marrone come al Nord degli USA, e nelle zone più al nord varie tonalità di verde (tranne acceso), grigio e “panna”.