Fuzzy Rules based systems Di Alessandro Rezzani Sommario Introduzione ...................................................................................................................................................... 1 Logica fuzzy e insiemi fuzzy ............................................................................................................................... 1 Sistemi fuzzy ...................................................................................................................................................... 2 Sistemi fuzzy per la classificazione e la regressione ...................................................................................... 2 Implementazione in R ........................................................................................................................................ 3 Conclusioni ........................................................................................................................................................ 6 Bibliografia ......................................................................................................................................................... 6 Introduzione I Fuzzy Rule Based Systems rappresentano un’applicazione della logica fuzzy a problemi di machine learning. In questo articolo cercheremo di descriverne il funzionamento, introducendo prima i concetti principali della logica fuzzy. Descriveremo inoltre l’implementazione dei Fuzzy Rule Based Systems che si trova nel package R frbs. Logica fuzzy e insiemi fuzzy La logica binaria, che costituisce la base per il funzionamento dei computer, prevede che i predicati possano assumere solamente due stati: vero e falso. Tuttavia tale semplificazione risulta spesso imprecisa e non aderente alla realtà, la quale contempla numerose sfaccettature: non esistono infatti soltanto il bianco ed il nero, ma esistono numerose sfumature che si pongono tra questi due valori estremi. La logica fuzzy tiene in considerazione proprio queste sfumature, discostandosi così dalla logica binaria. Nella logica tradizionale un elemento appartiene o non appartiene ad un determinato insieme, mentre nella logica fuzzy, un dato elemento appartiene ad un insieme fuzzy con un grado di verità che può assumere infiniti valori nell'intervallo [0,1]. Il grado di verità (o di appartenenza ad un insieme fuzzy) è definito da una funzione di appartenenza (membership). La teoria degli insiemi fuzzy (fuzzy set) propone quindi un nuovo concetto di insieme, che generalizza quello classico. Molti concetti “fuzzy” derivano da corrispondenti concetti del linguaggio umano, essi sono spesso piuttosto vaghi. Per questo la teoria degli insiemi fuzzy contiene strumenti in grado di rappresentare proprio tali concetti linguistici. Per esempio la temperatura può essere descritta da una variabile fuzzy che www.dataskills.it E-mail [email protected] possiede i valori “linguistici” freddo e caldo. Ciascun elemento avrà un grado di appartenenza a ciascun valore (insieme fuzzy), per esempio 0.90 caldo e 0.10 freddo. Volendo essere un po’ più formali, possiamo dire che una variabile linguistica è costituita dai seguenti elementi: x il nome della variabile (es. temperatura) T l’insieme di definizione della variabile (es [0°,50°]) Fi i fuzzy set definiti per la variabile (ovvero i valori linguistici, es. caldo e freddo) ai(x) le funzioni di appartenenza a ciascun set Le funzioni di appartenenza possono avere varie forme (triangolari, trapezoidali, sigmoidali , gaussiane): Sistemi fuzzy Un generico sistema fuzzy funziona tramite la realizzazione di tre fasi: - - La fuzzificazione: in questa fase le grandezze sono trasformate in base alle funzioni di appartenenza L’applicazione di regole (che, nel caso di sistemi di machine learning, saranno determinate nella fase di training). L’applicazione delle regole determina il valore dell’uscita a fronte della combinazione degli input. Le regole sono costituite da un insieme di proposizione IF….THEN. La defuzzificazione: il valore di uscita che deriva dall’applicazione delle regole fuzzy va convertito in un valore deterministico attraverso un processo chiamato defuzzificazione. Esistono numerosi metodi per la defuzzificazione. Uno dei più semplici da comprendere è quello basato sulla media dei massimi: il valore di uscita è ottenuto come media aritmetica dei valori per i quali è massima l’altezza del fuzzy set determinato dalle regole. Sistemi fuzzy per la classificazione e la regressione L’utilizzo dei sistemi fuzzy per la classificazione e la regressione prevede due fasi: www.dataskills.it E-mail [email protected] 1) La fase di apprendimento, nella quale, attraverso i dati di training si identifica la struttura, ovvero l’insieme delle regole. In seguito sono ottimizzati i parametri delle funzioni di appartenenza. 2) Fase predittiva, nella quale si applicano, ai nuovi dati, le tre fasi tipiche dei sistemi fuzzy, descritte poco sopra, ovvero: fuzzificazione, applicazione delle regole, defuzzificazione Implementazione in R Esamineremo ora il package frbs, che contiene una delle implementazioni in R dei sistemi fuzzy. Le funzioni principali sono: frbs.learn() per effettuare il training del sistema predict() per ottenere la prediction frbs.gen() per costruire un oggetto frbs manualmente, inputando le regole summary() per mostrare un oggetto frbs plotMF() per visualizzare la funzione di membership Senza entrare nel dettaglio di tutti i metodi utilizzabili nel package (i dettagli si trovano nella documentazione del package stesso, oppure nell’articolo citato in bibliografia), diciamo soltanto che esistono oltre 20 tipologie diverse per la costruzione/ training del sistema fuzzy. Tali tipologie di sistemi possono essere suddivisi in base al metodo di training: - Discesa del gradiente Partizioni Reti neurali Algoritmi genetici Clusterizzazione Riportiamo qui il codice R di un esempio sul dataset iris: library(frbs) #preparing the data all.iris <-iris all.iris[, 5] <- unclass(all.iris[, 5]) #test set & training set sets <- sample(2, nrow(all.iris), replace=TRUE, prob=c(0.7, 0.3)) tra.iris <-all.iris[sets==1,] www.dataskills.it E-mail [email protected] tst.iris <- all.iris[sets==2,1:(ncol(all.iris)-1)] real.iris<-all.iris[sets==2,(ncol(all.iris))] ## Define range of input data. (Only for the input variables) range.data.input <- apply(all.iris[, -ncol(all.iris)], 2, range) ## Set the method and its parameters. method.type <- "FRBCS.W" control <- list(num.labels = 5, type.mf = "GAUSSIAN", type.tnorm = "MIN", type.snorm = "MAX", type.implication.func = "ZADEH") #learning phase object.cls <- frbs.learn(tra.iris, range.data.input, method.type, control) ## Predicting step res.test <- predict(object.cls, tst.iris) ## Display the FRBS model summary(object.cls) ## Plot the membership functions plotMF(object.cls) www.dataskills.it E-mail [email protected] #confusion matrix table(real.iris,res.test) #rules object.cls$rule www.dataskills.it E-mail [email protected] Conclusioni I sistemi di classificazione e regressione basati sulla logica fuzzy sono particolarmente interessanti poiché produconi, assieme ad una prediction, anche le regole che la determinano. Tutto ciò è particolarmente utile nell’ottica della prescriptive analytics (si veda: http://www.dataskills.it/dalla-predictive-analytics-allaprescriptive-analytics/) . Le capacità predittive sono buone e rendono lo strumento utilizzabile nei casi in cui non si desideri utilizzare una “black-box machine”, ovvero uno strumento di machine learning che non dia alcuna indicazione su come si sia arrivati ad un certo risultato. È da segnalare però, che, l’implementazione R non è particolarmente performante dal punto di vista dei tempi di learning (per lo meno sulla macchina utilizzata per i test: una VM con 8 GB di RAM e 2 core virtuali). Bibliografia Riza, Bergmeir, “Frbs: Fuzzy Rule-Based Systems for Classication and Regression in R”, Journal of Statistical Software, May 2015, Volume 65, Issue 6 Veronesi, Visioli, “Logica Fuzzy”, FrancoAngeli, 2001 www.dataskills.it E-mail [email protected]