Il concetto di classificazione nei modelli di machine learning è di fondamentale importanza per una vasta gamma di applicazioni, che vanno dal riconoscimento di parole al riconoscimento di immagini, fino alla previsione di eventi in contesti più complessi. La creazione di un modello di classificazione prevede diverse fasi, tra cui la preparazione dei dati, l'addestramento del modello, la sua valutazione e l'implementazione finale. In questo capitolo, esploreremo come costruire e testare diversi modelli di classificazione in MATLAB, utilizzando vari algoritmi e approcci.

Un esempio pratico di applicazione è l'uso del modello Gaussian Naive Bayes per prevedere il sesso di una persona in base a tre variabili: altezza, peso e dimensione del piede. I dati, come quelli presentati nella Tabella 6L.1, contengono informazioni su diverse persone, suddivise in categorie di ragazzi e ragazze. La fase iniziale consiste nel calcolare le medie e le varianze di ciascuna caratteristica per ciascuna classe (maschio/femmina), utilizzando il codice MATLAB indicato nella Tabella 6L.2. Questo passaggio è essenziale, poiché permette di determinare i parametri necessari per la previsione.

Una volta calcolati questi valori, il passo successivo è testare il modello con nuovi dati, come quelli mostrati nella Tabella 6L.3, che rappresentano le caratteristiche fisiche di una ragazza. L'implementazione di un codice MATLAB personalizzato, come CalP_BoyGirl.m, consente di calcolare il valore di posteriori massimo (MAP) e fare una previsione sul sesso del soggetto. La corretta implementazione di questi passaggi assicura che il modello sia preciso e pronto per l'uso con nuovi dati.

Un altro caso d'uso è la classificazione di comandi vocali, come ‘yes’, ‘no’ e ‘up’. L'applicazione di un modello di classificazione del comando vocale prevede l'uso di un dataset modificato (Speech Commands Dataset), in cui i file vocali sono suddivisi in tre cartelle corrispondenti ai comandi. La fase di addestramento e test è simile a quella del modello di Naive Bayes, con la differenza che in questo caso i dati di input sono rappresentati da segnali vocali piuttosto che da misure fisiche. In MATLAB, il progetto Speech_Command_Classification.m utilizza la funzione audioread() per caricare i dati, e dopo l'addestramento, il modello può essere utilizzato per classificare nuovi comandi vocali. È importante che, prima di eseguire la valutazione, si esegua l'addestramento del modello con il progetto Speech_Command_Classification.m.

Passando alla classificazione delle immagini, un altro esempio interessante è la creazione di un classificatore per riconoscere diversi tipi di auto (pickup, sedan, SUV). Il progetto Cars_Image_Classifier.m si avvale di un dataset di immagini di auto suddiviso in tre categorie, utilizzando la tecnica Bag of Features per addestrare il modello. L'uso di immagini come dati di input è particolarmente utile in contesti dove i dati visivi sono cruciali, come nel riconoscimento di veicoli o oggetti in tempo reale.

Dopo aver costruito un classificatore di immagini, la fase successiva è quella della valutazione. Il progetto Cars_Image_Evaluation.m permette di testare il modello sui dati di test, calcolando l'accuratezza della classificazione e prendendo in considerazione il trade-off tra il tempo di valutazione e la quantità di dati di addestramento utilizzati. La valutazione finale dei modelli di classificazione delle immagini si concentra sulla capacità del modello di generalizzare i risultati ottenuti sui dati di test, mantenendo un livello di precisione accettabile (idealmente intorno al 75%).

Un altro approccio interessante per la classificazione delle immagini è l'uso del metodo HOG (Histogram of Oriented Gradients) insieme all'algoritmo fitcecoc() per eseguire la classificazione. Questo approccio si concentra sull'estrazione delle caratteristiche delle immagini, piuttosto che sull'elaborazione dei pixel grezzi, e risulta particolarmente utile per migliorare l'accuratezza del modello in contesti di immagini complesse, come quelle di veicoli. In questo caso, il progetto HOG_Cars_Classifier.m applica l'algoritmo di classificazione a un dataset di auto, con l'ulteriore passo di valutazione sui dati di test per determinare l'affidabilità del modello.

Oltre a questi approcci specifici, è fondamentale comprendere alcuni parametri chiave nella valutazione dei modelli di classificazione, come TPR (True Positive Rate), FNR (False Negative Rate), PPV (Positive Predictive Value) e FDR (False Discovery Rate). Questi parametri forniscono una panoramica dettagliata della qualità del modello, aiutando a identificare punti di forza e debolezza e a ottimizzare ulteriormente il modello per ottenere le migliori prestazioni possibili.

In sintesi, la costruzione e la valutazione di modelli di classificazione in MATLAB richiede una comprensione approfondita delle tecniche di machine learning, oltre alla capacità di adattare gli algoritmi alle specifiche esigenze dei dati in esame. Sia che si tratti di prevedere il sesso di una persona, classificare comandi vocali o riconoscere immagini, ogni progetto richiede un'attenta preparazione dei dati, un'accurata fase di addestramento e una rigorosa valutazione delle prestazioni del modello.

Come si costruisce e si valuta un sistema di inferenza fuzzy: regole di controllo e superfici di risposta

Nel processo di sviluppo di un sistema di inferenza fuzzy (FIS) è fondamentale comprendere come si definiscono e si aggiungono le regole di controllo che determinano il comportamento del sistema. Nel nostro esempio, abbiamo costruito una matrice di controllo composta da nove regole, ognuna rappresentata da una riga con cinque colonne. Queste colonne codificano gli indici degli insiemi fuzzy per le variabili di ingresso, l’uscita, il peso della regola e l’operatore logico associato. Ad esempio, la prima riga 1 1 3 1 1 indica che se la temperatura (prima variabile) è bassa (indice 1) e la variazione di temperatura (seconda variabile) è anch’essa bassa (indice 1), allora la velocità del motore (uscita) sarà alta (indice 3), con peso e operatore AND impostati a 1.

La funzione addRule() serve ad inserire queste regole nel sistema FIS, mentre writeFIS() consente di salvarlo. Non specificare un nome di file durante il salvataggio attiva una finestra di dialogo per scegliere manualmente la destinazione e il nome, fornendo così flessibilità nell’archiviazione. Per visualizzare la superficie di risposta del FIS si utilizza la funzione gensurf(), ma questa necessita che il sistema fuzzy sia caricato tramite readfis() da un file salvato, poiché non può operare direttamente su un oggetto FIS non salvato.

Il passo successivo è la valutazione del sistema con dati di input selezionati. La funzione evalfis() permette di inserire singole coppie di valori oppure matrici di input multiple per ottenere le corrispondenti uscite, che possono essere poi graficate per un’analisi visiva. Ad esempio, passando in input la coppia [70, 2.5] (temperatura e variazione di temperatura) si ottiene un valore di uscita specifico, che rappresenta la risposta del sistema fuzzy, come la velocità del motore in un sistema di condizionamento.

Per eseguire una valutazione più ampia, si crea una matrice contenente molteplici coppie di input e si richiama nuovamente evalfis(). I risultati prodotti possono essere tracciati per evidenziare l’andamento della risposta del sistema rispetto ai diversi valori di input, permettendo così di verificare la coerenza e la robustezza del modello fuzzy implementato.

Questa metodologia, pur richiedendo un codice più esteso rispetto all’uso di interfacce grafiche come la Fuzzy Logic Designer App, offre un controllo più granulare e la possibilità di personalizzare dettagliatamente ogni aspetto del sistema fuzzy. Tuttavia, la complessità del codice può rappresentare una sfida per i principianti senza esperienza di programmazione.

Infine, vale la pena introdurre il concetto di sistemi di inferenza fuzzy di Tipo-2, che estendono i tradizionali sistemi di Tipo-1 introducendo una dimensione aggiuntiva per modellare l’incertezza nella funzione di appartenenza. A differenza dei sistemi Type-1, i quali utilizzano funzioni di appartenenza monodimensionali, i Type-2 hanno funzioni di appartenenza tridimensionali che rappresentano una regione di incertezza detta Footprint of Uncertainty (FOU). Per semplificare l’implementazione, spesso si adottano sistemi di Tipo-2 a intervallo (Interval Type-2 FIS), in cui la funzione di appartenenza è definita da due limiti, superiore e inferiore, trasformando il problema da tridimensionale a bidimensionale. Questo approccio consente di gestire meglio l’incertezza intrinseca dei dati e dei modelli, rendendo il sistema più robusto in applicazioni complesse e realistiche.

Oltre a quanto esposto, è essenziale comprendere che la progettazione di un sistema FIS richiede una buona conoscenza non solo della logica fuzzy, ma anche della natura del problema da risolvere, in particolare la scelta accurata delle funzioni di appartenenza e la formulazione delle regole di controllo. La validazione del sistema con dati reali o simulati rappresenta un passaggio cruciale per assicurare che il modello rispecchi fedelmente il comportamento atteso. Inoltre, la capacità di interpretare graficamente superfici di risposta e risultati di valutazione aiuta a individuare eventuali incongruenze o aree di miglioramento nel sistema. Il passaggio verso i sistemi di Tipo-2 apre ulteriori possibilità di modellazione, ma comporta anche una maggiore complessità computazionale e concettuale, richiedendo pertanto una solida preparazione teorica e pratica.

Quali modelli e algoritmi si usano per la regressione non lineare?

La regressione non lineare rappresenta uno strumento essenziale per descrivere le relazioni complesse nei dati sperimentali, quando tali relazioni non possono essere adeguatamente modellate da funzioni lineari. In questo contesto, il modello è generalmente paramétrico e rappresenta la variabile di risposta come funzione di parametri non lineari e di uno o più predittori. La struttura dell’equazione può includere termini esponenziali, trigonometrici, potenze o qualsiasi altra forma funzionale non lineare.

La stima dei parametri non lineari avviene tramite algoritmi iterativi, in cui un vettore β rappresenta i parametri da stimare, mentre ε indica il termine di errore. Questa formulazione consente di affrontare una vasta gamma di problemi reali, dove la relazione tra input e output è intrinsecamente non lineare e non immediatamente riconducibile a modelli semplici.

Tra gli algoritmi più usati per approssimare funzioni non lineari, spiccano sei categorie fondamentali. I modelli basati su Decision Tree utilizzano alberi di regressione per suddividere iterativamente lo spazio delle variabili predittive in sottoinsiemi omogenei. Tali alberi possono essere visualizzati per analizzare graficamente i punti di separazione e comprendere l'importanza relativa dei predittori, come dimostrato dall'utilizzo di funzioni MATLAB quali view() per la rappresentazione dell’albero e histogram() per mostrare la distribuzione del numero di suddivisioni (split) imposte. I modelli cross-validati con KFold = 10 permettono di stabilizzare la stima e valutarne la robustezza rispetto al sovradattamento.

I Support Vector Machine (SVM), invece, sono algoritmi di apprendimento supervisionato che si prestano tanto alla classificazione quanto alla regressione. Nella regressione non lineare, gli SVM utilizzano trasformazioni del dominio (kernel) per modellare separazioni complesse nello spazio delle variabili, mantenendo al contempo una robustezza computazionale elevata. Questo approccio verrà analizzato più approfonditamente nella sezione successiva, data la sua rilevanza applicativa in contesti industriali e scientifici.

Le Artificial Neural Network (ANN) rappresentano un ulteriore strumento di modellazione non lineare. Composte da nodi interconnessi organizzati in strati, le reti neurali apprendono relazioni complesse regolando pesi e bias durante la fase di addestramento. La loro capacità di approssimare qualsiasi funzione continua le rende strumenti ideali per una varietà di applicazioni in cui i modelli classici falliscono.

La Polynomial Regression, invece, estende la regressione lineare classica includendo termini polinomiali di grado superiore. In questo modo, la relazione input-output può essere rappresentata con maggiore flessibilità, pur restando nel dominio della regressione parametrica. Tuttavia, l’aggiunta di gradi elevati può comportare fenomeni di sovradattamento e instabilità numerica, richiedendo attenzione nella scelta del grado ottimale.

Dal punto di vista algoritmico, il Gauss-Newton è un metodo di approssimazione di primo ordine, usato per problemi di minimi quadrati non lineari. Questo approccio non richiede la matrice hessiana, rendendolo più leggero computazionalmente rispetto ai metodi di secondo ordine.

Il Gradient Descent, invece, è l’algoritmo di ottimizzazione più diffuso. Si tratta di un metodo iterativo che aggiorna i parametri del modello nella direzione della discesa più ripida del gradiente della funzione di costo. Nonostante la semplicità, esso è al centro di numerosi algoritmi di machine learning e deep learning.

Infine, l’algoritmo di Levenberg-Marquardt si propone come un compromesso tra Gauss-Newton e il metodo del gradiente, combinando i vantaggi di entrambi per ottenere una convergenza più rapida e stabile nei problemi di regressione non lineare.

A questi algoritmi corrispondono modelli funzionali ben definiti. I più comunemente usati includono i modelli polinomiali, esponenziali, logaritmici, di Fourier, gaussiani e razionali. Alcuni modelli non lineari possono essere trasformati in modelli lineari tramite opportune trasformazioni, sebbene tali casi vengano considerati banali nel contesto di modellazione avanzata e quindi non trattati in dettaglio.

Nel contesto MATLAB, l’App Curve Fitter e funzioni come fit(), fitnlm() e nlinfit() consentono di implementare rapidamente questi modelli su dati reali. In particolare, la funzione fit() permette anche la costruzione di modelli gaussiani e razionali, rendendola uno strumento essenziale per applicazioni professionali in ambito ingegneristico e scientifico.

Per sfruttare appieno la potenza di questi strumenti, è importante comprendere non solo la scelta dell’algoritmo, ma anche l’adeguatezza del modello rispetto ai dati. L’analisi esplorativa dei dati, la normalizzazione, la gestione degli outlier e la valutazione delle metriche di errore sono passaggi imprescindibili in un processo di modellazione robusto. La selezione del modello deve sempre tenere conto della complessità intrinseca del fenomeno, della quantità di dati disponibili, e dell’obiettivo finale dell’analisi.

Come si costruisce e valuta un modello di classificazione binaria per il diabete in MATLAB

Il dataset utilizzato per l’analisi consiste in una matrice di dimensione 768×9, con variabili quali pressione sanguigna, spessore della pelle, insulina, BMI, funzione di ereditarietà del diabete, età e il risultato finale di diabete codificato come 0 (assenza di diabete) o 1 (presenza di diabete). Questo insieme di dati, denominato "Diabetes.csv", può essere facilmente reperito e salvato localmente per successive elaborazioni.

L’approccio adottato per costruire il modello di classificazione binaria si basa sull’uso dell’applicazione Classification Learner di MATLAB, la quale consente di selezionare, addestrare e valutare modelli di machine learning in modo interattivo. Il processo inizia aprendo MATLAB e selezionando l’app dal gruppo dedicato al machine learning e deep learning. Si importa il dataset dal file locale, prestando attenzione a convertire la variabile di uscita (Outcome) in una classe binaria (Boolean) per l’addestramento corretto del classificatore.

Per migliorare la validazione del modello, si imposta una porzione del dataset (circa il 10%) come dati di test. Questa pratica permette di valutare le prestazioni su dati mai visti durante l’addestramento, limitando il rischio di overfitting. L’addestramento può essere eseguito in modo automatizzato selezionando l’opzione "All Quick-To-Train", che consente di provare velocemente diversi modelli. Nel caso specifico, sono stati addestrati dodici modelli differenti, tra cui il migliore è risultato un modello di tipo Efficient Logistic Regression Tree, con un’accuratezza di validazione pari al 76,7%.

La valutazione delle performance del modello non si limita alla semplice accuratezza, ma include anche strumenti più dettagliati come il confronto grafico dei risultati predittivi, l’analisi della matrice di confusione e la curva ROC (Receiver Operating Characteristic). La matrice di confusione fornisce una rappresentazione dettagliata dei risultati, distinguendo tra veri positivi (TP), falsi negativi (FN), veri negativi (TN) e falsi positivi (FP). Questi parametri permettono di calcolare indicatori quali il True Positive Rate (TPR), False Negative Rate (FNR), Positive Predictive Value (PPV) e False Discovery Rate (FDR), fondamentali per comprendere la qualità delle classificazioni rispetto a ciascuna classe.

Nel caso studiato, il modello ha ottenuto un TPR dell’86,9% per la classe 0 (assenza di diabete) e un TPR del 57,9% per la classe 1 (presenza di diabete), evidenziando una maggiore difficoltà nel riconoscere correttamente i pazienti diabetici rispetto a quelli non diabetici. La curva ROC consente di valutare il compromesso tra sensibilità e specificità del classificatore al variare della soglia decisionale. L’Area Under the Curve (AUC), variabile tra 0 e 1, sintetizza la capacità complessiva del modello di distinguere tra le classi: valori più alti indicano modelli più efficaci.

Nel contesto della classificazione binaria, è importante sottolineare che le curve ROC per le due classi sono simmetriche, pertanto è sufficiente esaminare la curva relativa a una sola classe. Questo deriva dal fatto che il tasso di veri positivi (TPR) di una classe equivale al tasso di veri negativi (TNR) dell’altra, e il FNR corrisponde a 1 meno il TPR.

Accanto agli aspetti tecnici, è cruciale che chi affronta modelli di classificazione comprenda l’importanza della scelta e della qualità dei dati di input, poiché le performance dipendono fortemente da come i dati rappresentano la realtà clinica. Inoltre, la selezione di metriche di valutazione appropriate deve tenere conto dello scopo pratico del modello: per diagnosi mediche, minimizzare i falsi negativi può essere prioritario rispetto alla semplice accuratezza globale, poiché mancare un paziente diabetico può avere conseguenze più gravi rispetto a un falso allarme.

Infine, l’interpretazione critica dei risultati deve includere una valutazione del contesto clinico e delle possibili implicazioni etiche, in particolare quando i modelli vengono utilizzati per supportare decisioni sanitarie. Il processo di validazione dovrebbe prevedere anche test su dataset esterni e un monitoraggio continuo delle prestazioni nel tempo per garantire che il modello mantenga la sua efficacia in situazioni reali e dinamiche.

Come funziona il modello ECOC per la classificazione multiclasse e l’estrazione delle caratteristiche nelle immagini

Il modello ECOC (Error-Correcting Output Codes) rappresenta un approccio efficace e flessibile per affrontare problemi di classificazione multiclasse, in cui l’obiettivo è assegnare ad ogni osservazione una delle molteplici classi possibili. Questo modello si costruisce a partire da dati predittivi, organizzati tipicamente in una tabella o matrice, e da un vettore di etichette di classe corrispondenti. Attraverso la funzione fitcecoc è possibile addestrare un modello ECOC, utilizzando diverse configurazioni, fra cui la scelta di specifici algoritmi di classificazione binaria che saranno impiegati come “learner” base.

La personalizzazione del modello si effettua mediante parametri nome-valore, che permettono di selezionare vari template per i classificatori binari sottostanti: analisi discriminante, metodi ensemble, kernel, k-nearest neighbors, classificatori lineari, Naive Bayes, Support Vector Machines (SVM) o alberi decisionali. Ogni template incarna un approccio di apprendimento con caratteristiche e vantaggi distinti. Per esempio, impostare un template SVM con standardizzazione dei dati e design one-vs-all consente di definire un modello robusto e generalizzabile, soprattutto se accompagnato da tecniche di validazione incrociata come il k-fold.

L’efficacia di un modello ECOC dipende non solo dalla scelta del classificatore binario ma anche dalla corretta rappresentazione dei dati in ingresso. Nel caso di dati numerici, la relazione tra predittori e classi può essere diretta e quantitativa, mentre nelle applicazioni di classificazione di immagini questa relazione si complica. Le immagini non possiedono una corrispondenza numerica immediata con le etichette di classe: è dunque indispensabile estrarre caratteristiche rilevanti che traducano le informazioni visive in rappresentazioni numeriche compatte, sulle quali il modello possa operare.

L’estrazione delle caratteristiche può avvenire manualmente, richiedendo una profonda comprensione del dominio e l’individuazione di descrittori significativi, oppure automaticamente, attraverso algoritmi specializzati o reti neurali profonde che trasformano i dati grezzi in feature utili senza intervento umano diretto. Questa fase è fondamentale: applicare direttamente algoritmi di machine learning sui dati grezzi di immagini spesso non è sufficiente a garantire buone prestazioni.

Tecniche classiche di estrazione delle caratteristiche, ancora oggi largamente utilizzate o integrate in sistemi di visione artificiale, includono metodi come Histogram of Oriented Gradients (HOG), Speeded-Up Robust Features (SURF), Local Binary Patterns (LBP) e Bag of Features (BOF). Questi algoritmi si basano su principi consolidati per rappresentare forma, texture e altre proprietà strutturali delle immagini.

HOG, per esempio, si concentra sulla distribuzione degli orientamenti dei gradienti di intensità in aree localizzate dell’immagine. Questa metodologia prevede il calcolo dei gradienti in ciascun pixel o regione, seguiti da una normalizzazione spaziale in blocchi per ridurre l’influenza di variazioni di illuminazione e contrasto. Il risultato è un vettore di caratteristiche che sintetizza la forma e la struttura degli oggetti presenti, rendendoli distinguibili per il classificatore.

SURF, invece, si basa sull’utilizzo di filtri quadrati che approssimano la sfocatura gaussiana, sfruttando l’immagine integrale per accelerare i calcoli. Questo consente un rilevamento efficiente di punti di interesse robusti a variazioni di scala e rotazione, elementi essenziali per riconoscere oggetti in condizioni diverse.

La comprensione e l’implementazione di questi metodi richiedono attenzione ai dettagli tecnici: dalle dimensioni delle celle e dei blocchi in HOG, alla scelta dei parametri di filtro in SURF. L’accuratezza del classificatore finale è strettamente correlata alla qualità delle caratteristiche estratte e alla loro capacità di rappresentare fedelmente le differenze tra le classi.

È importante sottolineare che, sebbene le tecniche di estrazione delle caratteristiche manuali restino rilevanti, la tendenza attuale nel campo della visione artificiale è orientata verso l’uso del deep learning, che automatizza questa fase e consente l’apprendimento end-to-end. Tuttavia, comprendere i metodi tradizionali e il loro funzionamento fornisce una base essenziale per valutare le prestazioni dei modelli e interpretare i risultati, soprattutto in scenari con dati limitati o esigenze specifiche.

Inoltre, la validazione del modello tramite procedure come la cross-validation è indispensabile per stimare la sua capacità di generalizzazione e per evitare sovradattamenti ai dati di training. Le scelte effettuate nella configurazione dei learner e dei parametri influiscono direttamente su questo aspetto, determinando l’equilibrio tra complessità e robustezza del modello.

Infine, nel passaggio dalla teoria alla pratica, è fondamentale che il lettore tenga presente che la qualità del dataset, la rappresentatività delle classi e la preparazione accurata delle caratteristiche sono fattori chiave per il successo di qualsiasi applicazione di classificazione multiclasse, in particolare in ambito di immagini.