Nel clustering basato sul modello di Gaussian Mixture Model (GMM), la segmentazione dei dati si basa sulla distribuzione delle caratteristiche e sulla matrice di covarianza, che misura le direzioni di variazione tra le variabili. Nel caso dell’analisi del dataset del diabete, il modello GMM ha distinto due gruppi in base alle loro proprietà statistiche, identificando un cluster corrispondente ai pazienti diabetici e l’altro ai non diabetici. Questo risultato permette di ottenere una valutazione approssimativa dell’accuratezza del clustering, che in questo esempio si aggira intorno al 90%.
La matrice di covarianza svolge un ruolo cruciale nel processo di clustering multivariato con GMM, poiché indica come due variabili cambino simultaneamente. Una covarianza positiva segnala che entrambe le variabili tendono ad aumentare o diminuire insieme, mentre una covarianza negativa indica un andamento opposto tra le due. Questa matrice può assumere diverse forme: una matrice diagonale misura solo la variazione delle singole variabili indipendentemente, ignorando le relazioni tra variabili diverse, mentre una matrice completa valuta tutte le variazioni e le interazioni tra ogni coppia di variabili.
È importante comprendere la differenza tra covarianza e correlazione: entrambe misurano la relazione tra due variabili, ma la covarianza rivela solo la direzione del rapporto lineare, mentre la correlazione quantifica sia la direzione sia la forza del legame, ed è normalizzata per facilitare il confronto tra variabili con scale diverse.
L’analisi del clustering non si esaurisce con l’applicazione dell’algoritmo, ma richiede una valutazione critica sia del numero di cluster scelto sia della qualità del risultato ottenuto. In particolare, la selezione preventiva del numero di cluster può introdurre errori non prevedibili, poiché il valore definito a priori potrebbe non essere quello ottimale per i dati a disposizione. Per affrontare questo problema, è possibile utilizzare funzioni software, come evalclusters() in MATLAB, che permettono di testare diversi numeri di cluster e di individuare il valore ottimale sulla base di criteri quantitativi, come l’indice silhouette, che misura la coesione e la separazione dei cluster.
L’uso di evalclusters() consente di valutare algoritmi differenti e confrontare le performance relative in modo automatizzato. Ad esempio, nel caso dello studio sul dataset del diabete, la funzione ha permesso di determinare che due cluster sono quelli più appropriati per descrivere i dati, come indicato dal valore ottimale (OptimalK = 2). I risultati vengono visualizzati anche graficamente, facilitando l’interpretazione del modello e della distribuzione delle osservazioni all’interno dei cluster.
Questa procedura sottolinea l’importanza di una valutazione rigorosa nel clustering non supervisionato, dove l’assenza di etichette di riferimento rende complesso giudicare la bontà del modello. L’approccio basato su criteri quantitativi e grafici aiuta a stabilire una misura di affidabilità e a migliorare la robustezza delle analisi.
Oltre a quanto esposto, è essenziale riconoscere che la scelta del modello di clustering e dei parametri (come la forma della matrice di covarianza nel GMM) influenza direttamente i risultati. Modelli con matrice di covarianza completa catturano meglio le relazioni complesse tra variabili, ma richiedono più dati e possono essere più suscettibili a rumore e overfitting. La standardizzazione e la normalizzazione dei dati prima del clustering possono inoltre modificare i risultati e vanno considerate con attenzione.
Inoltre, l’interpretazione dei cluster deve tenere conto del contesto specifico del dataset e dell’obiettivo dell’analisi. Un alto tasso di correttezza numerica non garantisce che i cluster rappresentino effettivamente categorie significative o utili nel mondo reale. Pertanto, il clustering deve essere integrato con altre analisi e con la conoscenza del dominio per fornire risultati affidabili e applicabili.
Come si configura e si utilizza l’ambiente Simulink per l’apprendimento per rinforzo
Per inizializzare e configurare l’ambiente Simulink, è necessario sviluppare un codice MATLAB dedicato. Questo codice si racchiude in uno script, ad esempio denominato motor_simulink_env.m, che contiene le istruzioni per assegnare, aprire e definire i parametri del modello Simulink precedentemente creato (motor.slx). È importante sottolineare che, in MATLAB, non si deve mai utilizzare il nome completo del file con estensione ".slx" per fare riferimento al modello, ma solo il nome base, altrimenti si rischia un errore di compilazione. Lo script e il modello devono risiedere nella stessa cartella affinché il compilatore li trovi senza problemi.
L’apertura del modello avviene tramite la funzione open_system(), che consente di accedere all’intero ambiente Simulink. Per configurare le azioni (nel nostro caso la velocità del motore) e le osservazioni (velocità e errore di velocità) si utilizza la funzione rlNumericSpec(), che definisce i limiti superiori e inferiori di queste variabili. Ad esempio, la velocità di rotazione del motore è compresa tra -50 e 50 RPM, mentre l’errore di velocità è limitato tra 0 e 0.035 radianti. I nomi e le descrizioni delle osservazioni sono definiti per rendere il modello comprensibile e gestibile durante la fase di addestramento. Alcuni blocchi come “calculate reward” e “stop simulation” non necessitano di ulteriori configurazioni, ma è essenziale confermarne l’apertura per il corretto funzionamento del modello.
L’ambiente Simulink completo si crea infine associando un agente, tramite la funzione rlSimulinkEnv(), che prende come argomenti le strutture di configurazione delle osservazioni e delle azioni. Al momento dell’esecuzione dello script, il modello si apre e appare nella workspace di MATLAB pronto per essere utilizzato nella fase di training tramite l’APP Reinforcement Learning Designer.
Per allenare e simulare l’ambiente si procede importando il modello nel Reinforcement Learning Designer, creando un agente e scegliendo un algoritmo di training, come il Soft Actor-Critic (SAC). Il processo è intuitivo: si mantiene il nome predefinito dell’agente, si seleziona l’algoritmo, si impostano i parametri di training (ad esempio riducendo gli episodi massimi da 500 a 200) e si avvia l’addestramento. Al termine, si può simulare il comportamento dell’agente, accettare i risultati e salvare la sessione completa per usi futuri.
Il modello Simulink può presentare errori di riconoscimento iniziale dell’agente, ad esempio quando il blocco RL Agent è nominato con il nome di default “agentObj”. Questi errori derivano da configurazioni iniziali mancanti o errate, e si risolvono eseguendo lo script di configurazione. Dopo la sua esecuzione, il blocco viene riconosciuto correttamente, consentendo la prosecuzione del lavoro senza problemi.
L’agente SAC scelto nel nostro esempio accelera il processo di creazione, ma è possibile utilizzare anche altri algoritmi di apprendimento per rinforzo come TD3, PPO, DDPG o TRPO, selezionabili direttamente nel Reinforcement Learning Designer. Questo permette di confrontare diversi agenti nello stesso ambiente Simulink, valutando la qualità e la velocità dell’addestramento e la precisione della simulazione. È consigliabile mantenere traccia di tutti i risultati per effettuare confronti dettagliati tra i diversi approcci.
Oltre a quanto descritto, è importante comprendere che la scelta dell’algoritmo di apprendimento, la configurazione degli spazi di azione e osservazione e la corretta gestione dei parametri di training influenzano profondamente le prestazioni e la robustezza dell’agente. Inoltre, la sincronizzazione tra codice MATLAB e modello Simulink richiede attenzione, poiché errori di percorso o nomi possono compromettere l’intero processo. La modularità dell’ambiente Simulink, unita alla flessibilità del Reinforcement Learning Designer, consente una sperimentazione agile e un affinamento continuo dell’agente, indispensabili per applicazioni reali complesse.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский