La funzione evalfis() rappresenta uno strumento essenziale per valutare un sistema di inferenza fuzzy (FIS) in MATLAB. La sua sintassi fondamentale è output = evalfis(fis, input), dove fis indica il sistema fuzzy precedentemente definito, e input può essere una singola coppia di valori o una matrice contenente più coppie di input. Per esempio, la riga di codice output = evalfis(itype2_fis, [0.2, 0.05]); restituisce un valore di output numerico, come 342.9356, che rappresenta il risultato dell’elaborazione fuzzy per l’input specificato.

Per automatizzare e replicare questa procedura, si crea un file script MATLAB, come Eval_IT2FIS.m, nel quale si inseriscono le righe di codice che caricano il file FIS sviluppato, itype2_fis, mediante la funzione readfis(). È importante assicurarsi che MATLAB punti alla cartella corretta, eventualmente utilizzando il comando cd per modificare la directory di lavoro. A questo punto si può testare il sistema con una coppia di input, osservando il risultato nella Command window, e successivamente si estende l’analisi utilizzando matrici di input per generare una serie di output, anch’essi matriciali. Il risultato può infine essere visualizzato tramite grafici che mostrano l’andamento della risposta del sistema, confermando l’efficacia del controllo fuzzy implementato.

Rispetto all’uso dell’App Fuzzy Logic Designer, la programmazione diretta con funzioni come evalfis offre un livello superiore di flessibilità e controllo, permettendo di personalizzare dettagliatamente ogni aspetto della logica fuzzy e del processo inferenziale, rendendo questo approccio più adatto a progetti complessi come il controllo di un condizionatore d’aria.

Per valutare e confrontare le prestazioni di sistemi fuzzy di Tipo-1 e Intervallo Tipo-2 (IT2), è possibile convertire un IT2 FIS in un FIS di Tipo-1 tramite la funzione convertToType1(). Questo consente di ottenere un sistema Mamdani di Tipo-1 a partire da un IT2, permettendo una comparazione diretta delle risposte dei due controllori. Tale conversione viene tipicamente effettuata in uno script dedicato, come ConvT1FIS.m, che carica il sistema IT2, ne visualizza le funzioni di appartenenza del primo input, converte il sistema, salva il nuovo FIS e ne mostra graficamente le funzioni di appartenenza risultanti per verificarne la correttezza.

L’analisi comparativa si completa creando un modello di simulazione in MATLAB Simulink, denominato ad esempio t1_it2_fis_comp.slx, nel quale si assemblano blocchi predefiniti come Gain, MUX, Transfer Function, Scope e, soprattutto, blocchi dedicati al controllo fuzzy sotto la Fuzzy Logic Toolbox. Questi blocchi sono connessi e configurati per rappresentare i due sistemi di controllo. Prima di avviare la simulazione, è necessario esportare i due FIS nella Workspace MATLAB per renderli accessibili a Simulink, operazione che può essere effettuata sia tramite l’App dedicata sia mediante comandi diretti da riga di comando.

Costruire e parametrare con precisione ogni blocco nel modello Simulink è cruciale per ottenere risultati di simulazione affidabili e confrontabili. Tale simulazione consente di osservare la dinamica dei controllori in situazioni realistiche e di valutare vantaggi e limiti del modello IT2 rispetto al Tipo-1, soprattutto in termini di robustezza e capacità di gestione delle incertezze e rumori nei dati.

Comprendere il funzionamento di evalfis() e la metodologia per passare da sistemi fuzzy IT2 a Tipo-1 è fondamentale per chi si occupa di sistemi di controllo intelligenti, poiché permette di sfruttare appieno la potenza della logica fuzzy per la modellazione e la gestione di sistemi complessi. Il confronto pratico tra i due approcci mediante simulazioni approfondite è indispensabile per valutare i miglioramenti apportati dai sistemi di tipo IT2, che, sebbene più complessi, offrono capacità superiori di gestione delle incertezze.

Va inoltre considerato che la configurazione accurata dei blocchi Simulink e la corretta esportazione dei FIS sono passaggi tecnici non banali, ma necessari per una corretta implementazione del sistema di controllo. Un’attenzione particolare deve essere posta alla scelta delle funzioni di appartenenza e alla validazione dei risultati attraverso la visualizzazione grafica. Solo attraverso una pratica costante e l’analisi dettagliata si può cogliere appieno il potenziale della logica fuzzy nella progettazione di sistemi di controllo avanzati.

Come funzionano i principali algoritmi di classificazione multiclass con dati misti: esempi pratici e considerazioni

L’analisi e la classificazione di dataset complessi rappresentano una delle sfide più rilevanti nell’ambito dell’apprendimento automatico. Considerando un dataset di partenza, come quello utilizzato per l’esempio con dati relativi al diabete, il primo passo fondamentale consiste nel preparare i dati affinché siano idonei per il training degli algoritmi di classificazione. Nel caso specifico, il percorso del dataset viene definito e assegnato a una variabile locale, quindi viene creato il nome completo del dataset combinando il percorso con il nome del file tramite una funzione di concatenazione. Questo procedimento ha lo scopo di ottimizzare e abbreviare le linee di codice, senza alterarne la funzionalità.

Una volta caricato il dataset, i dati vengono divisi in due insiemi distinti: un set di training, formato dai primi 900 campioni, e un set di test, costituito dagli ultimi 100. La selezione dei predittori avviene estraendo le prime 13 colonne, mentre la variabile risposta corrisponde all’ultima colonna che rappresenta la classe di appartenenza. La costruzione degli oggetti classificatori avviene tramite funzioni specifiche come fitcknn() per il K-Nearest Neighbors (KNN), fitcnb() per il Naive Bayes e fitcecoc() per l’Error-Correcting Output Codes (ECOC).

L’addestramento del modello consiste nell’associare predittori e risposte, e successivamente si procede con la validazione applicando i dati di test. La funzione predict() genera le previsioni delle classi, e queste vengono confrontate con i valori reali tramite una matrice di confusione, visualizzata attraverso una funzione dedicata, plotConfChart(), che permette di valutare graficamente la qualità della classificazione ottenuta. Dall’analisi dei risultati emerge che il metodo KNN fornisce le performance migliori, seguito dal Naive Bayes, mentre ECOC risulta meno efficace nel caso specifico.

Una limitazione importante del classificatore KNN riguarda il tipo di dati accettati: esso richiede che l’intero dataset di training sia omogeneo, cioè composto esclusivamente da dati numerici o da stringhe, ma non da un mix di entrambi. Al contrario, algoritmi come Naive Bayes ed ECOC accettano dati misti, combinando variabili categoriche e numeriche senza necessità di conversioni preliminari. In questi casi, però, è fondamentale convertire le stringhe in variabili categoriche tramite la funzione categorical() e mantenere il dataset in formato tabellare, non matriciale, per consentire una corretta elaborazione.

Questo approccio evita la complessità della pre-elaborazione manuale, come la trasformazione di colonne di genere in numeri, rendendo più immediato l’utilizzo di dati reali eterogenei. L’esempio pratico riportato mostra come modificare uno script esistente per generare un dataset casuale che conserva le caratteristiche originali, ma senza la necessità di convertire i dati testuali, facilitando così l’uso dei classificatori più flessibili.

Oltre a quanto esposto, è importante sottolineare che la scelta dell’algoritmo di classificazione deve sempre considerare la natura e la qualità dei dati disponibili. Un dataset con dati misti richiede particolare attenzione nella fase di preparazione e scelta del modello, poiché la compatibilità dei dati con il classificatore incide direttamente sulle prestazioni finali. Inoltre, la valutazione mediante matrici di confusione offre una visione chiara degli errori di classificazione, ma può essere integrata con metriche più avanzate come l’accuratezza, la precisione, il richiamo e il F1-score per un’analisi più completa.

È altresì cruciale comprendere che il bilanciamento del dataset e la randomizzazione dei dati, come mostrato nell’esempio con la riorganizzazione casuale delle righe, influenzano significativamente l’efficacia del training e la generalizzazione del modello. Un dataset sbilanciato può portare a modelli con bias verso classi maggioritarie, compromettendo l’affidabilità delle previsioni.

Infine, la gestione delle variabili categoriche mediante la conversione in dati categoriali non solo permette di mantenere intatta la semantica originale delle informazioni, ma facilita anche l’inclusione di dati eterogenei all’interno del processo di classificazione, ampliando così le possibilità di applicazione degli algoritmi a contesti reali e complessi, dove la purezza del dato numerico è spesso un’eccezione piuttosto che la regola.