I sistemi basati sulla conoscenza rappresentano un tentativo di emulare il ragionamento umano attraverso strumenti informatici che operano in domini specifici, utilizzando una rappresentazione simbolica del sapere, spesso sotto forma di regole "se-allora". Questi sistemi si fondano su tre componenti essenziali: la base di conoscenza, che raccoglie dati e informazioni strutturate; il motore di inferenza, che simula il processo decisionale umano combinando informazioni pertinenti; e l’interfaccia utente, che consente l’interazione e la formulazione di richieste da parte dell’utente.

Tra le diverse tipologie di sistemi basati sulla conoscenza, quelli a regole (rule-based systems) sono tra i più diffusi e consistono in un insieme di regole rigide che collegano condizioni a risultati specifici. Questi sistemi sfruttano meccanismi di inferenza per elaborare le informazioni e trarre conclusioni. Due tra i metodi più noti sono il chaining all’indietro (backward chaining) e il chaining in avanti (forward chaining).

Il backward chaining è un metodo goal-driven, top-down, che parte da una conclusione o da un obiettivo e procede a ritroso per identificare le condizioni iniziali e le regole che hanno portato a quel risultato. Questo approccio utilizza una ricerca in profondità per risalire alle cause, scandagliando la tabella delle regole per trovare azioni corrispondenti a stati definiti dalle regole "se-allora". Il processo è simile a un’indagine retrospettiva che risponde al perché un certo evento si è verificato. Un esempio illuminante è il sistema che decide l’entità della mancia in un ristorante: partendo dall’importo della mancia (conclusione), il sistema risale alle valutazioni di qualità del cibo e del servizio che l’hanno determinata, applicando le regole stabilite.

Al contrario, il forward chaining procede in modo lineare e progressivo: partendo dai dati noti, applica le regole in sequenza per arrivare a una conclusione o a una soluzione. Questo approccio è data-driven, bottom-up, ed è utile quando si dispone di una base di fatti iniziali dai quali derivare nuove informazioni.

Questi metodi di inferenza non sono solo fondamentali nei sistemi esperti, ma trovano riscontro anche in algoritmi di apprendimento automatico, come la retropropagazione nelle reti neurali, che utilizza un meccanismo analogo di propagazione all’indietro per ottimizzare i parametri del modello.

La rappresentazione della conoscenza nei sistemi basati sulla conoscenza deve essere accurata e coerente, poiché la qualità del processo inferenziale dipende dalla correttezza e dalla completezza delle regole e dei dati memorizzati. Inoltre, i sistemi devono essere in grado di gestire l’incertezza e la complessità insite nelle situazioni reali, cosa che spesso comporta l’uso di logiche più sofisticate o l’integrazione con tecniche di apprendimento automatico.

È cruciale comprendere che questi sistemi non imitano soltanto un comportamento automatico, ma riproducono processi cognitivi umani complessi che richiedono una combinazione di conoscenza, ragionamento e capacità di adattamento a nuove informazioni. La ciclicità del processo di acquisizione, valutazione e utilizzo della conoscenza permette a questi sistemi di migliorare continuamente le proprie prestazioni e di affrontare compiti sempre più complessi con efficienza crescente.

Come si misura l’incertezza nelle decisioni: entropia, guadagno informativo e la transizione dagli alberi decisionali alle reti neurali

L'entropia è una misura fondamentale dell’incertezza o del disordine associato a una variabile casuale, in questo caso il livello di rischio ("Risk Level") in un contesto decisionale. Quando il livello di rischio è distribuito in modo uniforme tra le classi "Low" e "High", l’entropia raggiunge il suo massimo valore di 1, indicando una totale imprevedibilità e, di conseguenza, una difficoltà nel prendere decisioni affidabili basate solo su questa variabile. Per superare questa difficoltà, si introduce un’altra variabile, il "Numero di Incidenti" ("Accident Number"), che permette di segmentare ulteriormente i dati e calcolare l’entropia condizionata rispetto a questa nuova informazione.

Calcolando l’entropia condizionata per ogni valore di "Accident Number" e poi pesando queste entropie in base alla proporzione di osservazioni per ciascun valore, si ottiene un’entropia complessiva inferiore (0,60 rispetto a 1). La riduzione dell’entropia, misurata come guadagno informativo ("Information Gain"), quantifica la quantità di incertezza che viene eliminata grazie all’inclusione di una nuova caratteristica. Un guadagno informativo di 0,40 indica un miglioramento significativo nella capacità di classificare o prevedere il livello di rischio grazie al dato aggiuntivo.

Questo principio di riduzione dell’incertezza è alla base degli algoritmi di apprendimento automatico e, in particolare, degli alberi decisionali, che suddividono iterativamente i dati in base alle caratteristiche più informative per giungere a decisioni più precise. Nel processo di costruzione di un albero decisionale, ogni nodo rappresenta una condizione su una caratteristica e i rami derivano dalle possibili valutazioni di tale condizione. L’obiettivo è massimizzare la purezza (o minimizzare l’entropia) delle foglie, ovvero delle suddivisioni finali.

È interessante notare che la struttura di un albero decisionale ruotato di 90° può essere mappata a quella di una rete neurale, dove ogni nodo di test corrisponde a un neurone e ogni regola o condizione rappresenta un peso associato alle connessioni tra i neuroni. Mentre gli alberi decisionali seguono regole binarie e suddivisioni sequenziali, le reti neurali apprendono in modo più flessibile tramite un processo di addestramento che ottimizza i pesi per minimizzare l’errore complessivo sulle coppie input-output. La capacità delle reti neurali di combinare simultaneamente molteplici regole e gestire strutture multilivello permette loro di affrontare problemi di complessità molto maggiore rispetto agli alberi tradizionali.

Nel contesto dell’intelligenza artificiale, il sistema di inferenza fuzzy e i metodi di apprendimento automatico (supervisionato, non supervisionato e per rinforzo) rappresentano approcci complementari alla costruzione di macchine intelligenti in grado di apprendere dall’esperienza e di prendere decisioni autonome. La conoscenza può essere rappresentata e manipolata attraverso logiche proposizionali, sistemi basati sulla conoscenza e cicli di conoscenza, tutti strumenti fondamentali per comprendere e migliorare i processi decisionali automatizzati.

Per un’efficace applicazione pratica, è cruciale che il lettore comprenda che la riduzione dell’entropia e l’aumento del guadagno informativo sono i motori che permettono agli algoritmi di apprendimento di migliorare progressivamente le proprie previsioni. La differenza tra gli alberi decisionali e le reti neurali non è solo strutturale, ma anche funzionale: i primi sono interpretabili e costruiti su regole discrete, mentre le seconde apprendono modelli continui e distribuiti, richiedendo però un processo di training più complesso e dati etichettati.

Questa distinzione riflette il passaggio dall’apprendimento basato su regole esplicite a quello basato su modelli statistici adattativi, che è una delle caratteristiche distintive dell’intelligenza artificiale moderna. La comprensione di questi concetti permette di interpretare meglio le scelte progettuali dietro gli algoritmi di AI e di riconoscere le loro potenzialità e limiti in applicazioni reali.

Come Funziona la Classificazione Lineare con Algoritmi Binari

La classificazione lineare è una delle tecniche fondamentali nel campo dell'apprendimento automatico, soprattutto quando si tratta di separare due classi di dati distinti. In un classificatore lineare, la decisione di classificazione per una determinata osservazione viene presa in base al valore di una combinazione lineare delle caratteristiche di quell'osservazione. In un classificatore lineare binario, l'osservazione viene assegnata a una delle due classi possibili tramite una separazione lineare nello spazio delle caratteristiche in ingresso.

Iniziamo a comprendere meglio il processo di addestramento di un modello di classificazione binaria utilizzando valori virtuali. Supponiamo di avere un set di immagini di tre classi: Gatto, Cane e Auto. Ogni immagine viene trasformata in un vettore di 5 elementi, che funge da input per il nostro modello di classificazione. Il peso del modello è rappresentato da una matrice 3×5, che contiene i valori dei pesi per ciascun vettore di input. L’obiettivo dell'addestramento è minimizzare l’errore, ossia la differenza tra l'output previsto e l'output desiderato, fino a che l’errore non diventi sufficientemente piccolo da essere accettabile.

Nel processo di addestramento, ogni punteggio calcolato viene confrontato con il punteggio desiderato, rappresentato da un vettore di valori binari che indica la classe dell'immagine (ad esempio, [1 0 0]T per il Gatto). L'errore, o perdita, funge da indicatore di quanto il modello stia sbagliando nella previsione. Questo errore viene quindi retroazionato ai pesi e al bias del modello, e i parametri vengono aggiustati per ridurre l'errore fino a che non raggiunga un valore accettabile.

Durante questo processo, il calcolo del punteggio avviene attraverso la moltiplicazione della matrice dei pesi per il vettore di input e l’aggiunta di un termine di bias. Questo processo è reso possibile tramite una semplice operazione di moltiplicazione di matrici, che consente al modello di effettuare una previsione sulla classe dell’immagine in ingresso. I calcoli eseguiti sono illustrati nel codice MATLAB mostrato nell’esempio, che permette di simulare il processo di addestramento del modello.

Nel contesto della classificazione binaria lineare, uno degli approcci più comuni è l'uso della regressione logistica, supportata da funzioni come fitclinear() e fitglm(), che implementano rispettivamente la regressione logistica e il modello lineare generalizzato. Un altro strumento utile è il classificatore SVM (Support Vector Machine), che sfrutta i margini più ampi possibili per separare le due classi di dati.

Un concetto fondamentale da comprendere nella classificazione binaria è l’uso della funzione del kernel, in particolare il kernel Gaussiano. Il kernel permette di mappare i dati in uno spazio di dimensioni superiori, dove la separazione tra le classi diventa più lineare. Questo processo è descritto matematicamente dalla funzione del kernel Gaussiano, che misura la somiglianza tra due punti dati e aiuta a determinare se appartengono alla stessa classe o meno. Il parametro σ della funzione Gaussiana gioca un ruolo cruciale nella determinazione della larghezza del kernel e, quindi, nella separazione delle classi.

L'algoritmo di Support Vector Machine (SVM) è particolarmente potente quando i dati non sono separabili linearmente nello spazio delle caratteristiche originali, ma diventa più efficace utilizzando una trasformazione tramite il kernel. Esso cerca di costruire un iperpiano che massimizza il margine tra le classi, cercando di evitare overfitting e migliorando la generalizzazione.

Per quanto riguarda l'algoritmo K-Nearest Neighbors (KNN), che è un metodo non paramtrico, esso non cerca di separare le classi tramite un iperpiano. Piuttosto, classifica un dato in base alla classe della maggior parte dei suoi vicini più prossimi nello spazio delle caratteristiche. Questo approccio è molto semplice ma può risultare sorprendentemente efficace in molti casi, specialmente quando le classi sono distribuite in modo non lineare.

Esistono anche altre funzioni di classificazione binaria, come la funzione fitckernel(), che utilizza il kernel Gaussiano per mappare i dati in spazi di maggiore dimensione, e la funzione fitcsvm() per implementare un classificatore SVM. L'uso di diverse tecniche di kernel, come il kernel lineare, polinomiale e gaussiano, consente di scegliere il miglior modello in base alla natura dei dati e alla complessità del problema.

Un’altra interessante opzione è l’uso delle foreste casuali, attraverso la funzione TreeBagger(), che costruisce più alberi decisionali e li combina per migliorare la precisione del modello. L’approccio delle foreste casuali è utile per evitare il problema dell’overfitting, combinando i risultati di più alberi di decisione costruiti su campioni di dati differenti.

Ogni algoritmo di classificazione lineare ha le proprie peculiarità e vantaggi, e la scelta dipende molto dalla natura del problema che si sta cercando di risolvere. È importante notare che, oltre a questi metodi, la validazione incrociata, come il K-fold cross-validation, è una pratica fondamentale per valutare l’efficacia del modello e garantire che non si verifichi un overfitting.

In sintesi, per addestrare un modello di classificazione binaria, è essenziale non solo comprendere i concetti teorici di base, ma anche saper scegliere gli strumenti giusti per il tipo di dati a disposizione. L’implementazione pratica, ad esempio tramite MATLAB, è un passo fondamentale per mettere in pratica la teoria, utilizzando funzioni predefinite per costruire, testare e validare i modelli.

Come funziona la codifica a correzione di errore (ECOC) nella classificazione multiclasse?

La codifica a correzione di errore (Error-Correcting Output Code, ECOC) è una tecnica sofisticata che permette di trasformare un problema di classificazione multiclasse in più problemi di classificazione binaria, rendendo la gestione di classi multiple più efficiente e robusta. Prendendo come esempio un dataset con tre classi di output – Y (Diabete), N (No Diabete), e P (Diabete Predetto) – è possibile utilizzare due metodi principali per la riformulazione del problema: One-vs-Rest (OvR) e One-vs-One (OvO).

Nel metodo OvR, ogni classe viene confrontata contro tutte le altre insieme, creando tre dataset binari separati. Ad esempio, per la classe Y, si confrontano Y contro [N, P], e così via per le altre classi. Questo approccio semplifica l’addestramento, in quanto si occupa di problemi binari, ma mantiene una chiara struttura per identificare ogni categoria nel contesto multiclasse.

Durante la fase di codifica, ogni colonna di una matrice binaria corrisponde a un classificatore binario distinto, mentre ogni riga rappresenta una classe. I valori 1 indicano che il classificatore considera positiva quella classe, mentre 0 la considera negativa. Nel caso di un dataset con dieci feature (ad esempio: età, urea, creatinina, HbA1c, colesterolo, trigliceridi, HDL, LDL, VLDL, BMI), si addestra un classificatore binario per ogni feature. Questi classificatori producono un vettore binario unico per ogni classe, come ad esempio Y[1 0 0 … 1], N[0 0 …1], P[0 1 … 0].

Il processo di decoding, che si applica durante la fase di test, consiste nel confrontare il vettore binario prodotto dall’input di prova con i vettori codificati di ogni classe, utilizzando la distanza di Hamming per misurare la somiglianza. La classe predetta è quella il cui vettore codificato ha la distanza minima rispetto al vettore del campione testato. Questo metodo consente di ottenere una classificazione precisa anche in presenza di rumore o dati imperfetti, grazie alla capacità intrinseca di correzione di errori dell’ECOC.

Uno degli aspetti più rilevanti dell’approccio ECOC è la sua flessibilità nell’utilizzare qualsiasi algoritmo di classificazione binaria esistente, come ad esempio le Support Vector Machines (SVM), per costruire i classificatori binari di base. Questo permette di sfruttare la ricchezza e la varietà degli algoritmi disponibili per migliorare la performance complessiva nel contesto multiclasse.

La matrice di codifica e i relativi classificatori rappresentano un sistema di codifica ridondante che migliora la capacità del modello di distinguere tra classi simili, aumentando la robustezza contro errori di classificazione. Sebbene l’uso di molti classificatori possa aumentare la complessità computazionale, il vantaggio in termini di accuratezza e capacità di generalizzazione è spesso determinante.

Comprendere la natura del codice ECOC e la sua implementazione è cruciale per padroneggiare la classificazione multiclasse, specialmente in ambiti complessi come la diagnosi medica, dove le classi possono presentare confini di separazione sfumati e sovrapposizioni. La scelta e la progettazione della matrice di codifica, così come la selezione dell’algoritmo di classificazione binaria più adatto, influenzano direttamente l’efficacia del sistema.

È importante riconoscere che l’ECOC non è una semplice tecnica di trasformazione, ma un framework che integra codifica e apprendimento, fornendo un meccanismo per ridurre l’incertezza e migliorare la resilienza del modello. Questa metodologia consente inoltre di affrontare dataset con un numero elevato di classi, dove approcci tradizionali diventerebbero inefficaci o impraticabili.

Un aspetto non immediatamente evidente ma fondamentale è la gestione della complessità nella creazione della matrice di codifica: scegliere un design ottimale della matrice può ridurre significativamente il numero di classificatori necessari senza perdere capacità di discriminazione. Questo richiede un bilanciamento tra il livello di ridondanza del codice e l’efficienza computazionale, un tema spesso approfondito nelle applicazioni avanzate.

Infine, mentre la distanza di Hamming è comunemente usata per il decoding, altre metriche di distanza o tecniche di aggregazione possono essere adottate per migliorare la sensibilità alle caratteristiche specifiche dei dati. Questo offre ulteriori possibilità di personalizzazione e ottimizzazione della metodologia ECOC secondo le necessità applicative.