Insiemi fuzzy e funzioni di appartenenza: come scrivere «un po’ caldo»
Il confine netto e il paradosso del mucchio, l’insieme fuzzy e il grado di appartenenza, le forme delle funzioni di appartenenza, la variabile linguistica, supporto, nucleo e α-tagli, le operazioni di Zadeh e i modificatori «molto» e «un po’» — sulla temperatura, dal freddo al torrido.
Serie Basi di IA Parte 32 di 52
- Mappa dell’intelligenza artificiale: che cos’è ciascuna cosa e come si incastra tutto
- Breve storia dell’intelligenza artificiale: da Turing ai modelli linguistici
- Dati, modello, addestramento, inferenza: i concetti di base su un unico esempio
- Come leggere la notazione matematica: simboli, indici, sommatorie e quantificatori
- Insiemi e relazioni: i mattoncini con cui si costruiscono le definizioni nell’IA
- Funzioni e applicazioni: perché ogni modello di IA è una funzione
- Logica e dimostrazioni: le regole con cui si ragiona nell’IA
- Grafi e alberi: la struttura su cui poggiano la ricerca e le reti neurali
- Algebra lineare per l’apprendimento automatico: vettori, matrici e perché l’IA soprattutto moltiplica
- Derivate, gradiente e regola della catena: come un modello capisce in quale direzione imparare
- Discesa del gradiente: come impara un modello
- Che cos’è la probabilità: dal lancio di un dado agli assiomi di Kolmogorov
- Probabilità condizionata e teorema di Bayes: come cambiare una stima quando scopri qualcosa di nuovo
- Variabile aleatoria e funzione di ripartizione: una sola funzione che dice tutto sulla distribuzione
- Funzione di densità e funzione di massa: perché una variabile continua ha probabilità zero in un punto
- Valore atteso, varianza e covarianza: dove si trova una distribuzione, quanto è larga e che cosa è legato a che cosa
- Panoramica delle distribuzioni di probabilità: Bernoulli, binomiale, Poisson, uniforme, normale ed esponenziale
- Legge dei grandi numeri e teorema del limite centrale: perché le medie si comportano in modo così prevedibile
- Statistica e stima dei parametri: massima verosimiglianza, MAP e intervalli di confidenza
- Teoria dell’informazione: entropia, entropia incrociata e divergenza KL — da dove vengono le funzioni di perdita
- Ricerca nello spazio degli stati: BFS, DFS, UCS e A* con animazioni
- Giochi e avversari: minimax, potatura alfa-beta e Monte Carlo tree search
- Soddisfacimento di vincoli: backtracking, propagazione dei vincoli e AC-3 su un sudoku e una mappa delle regioni ceche
- Logica e sistemi basati sulla conoscenza: concatenazione in avanti e all’indietro, risoluzione e sistemi esperti
- Pianificazione: STRIPS, il mondo dei blocchi, euristiche dal rilassamento e pianificazione negli agenti IA
- Ricerca locale e ricottura simulata: un commesso viaggiatore tra i capoluoghi di regione cechi
- Algoritmi genetici: popolazione, incrocio, mutazione e selezione su uno zaino per l’escursione
- Strategie evolutive e programmazione genetica: dalla regola di un quinto alla legge di Keplero
- Ottimizzazione con colonie di formiche: come una traccia di feromone trova un percorso breve
- Ottimizzazione a sciame di particelle: inerzia, esperienza propria ed esperienza dello sciame
- Neuroevoluzione: evoluzione dei pesi e della forma delle reti neurali e l’algoritmo NEAT
- Insiemi fuzzy e funzioni di appartenenza: come scrivere «un po’ caldo»
- Logica fuzzy e probabilità: perché «un po’ caldo» non significa «probabilmente caldo»
- Logica fuzzy: t-norme, implicazioni e regole SE–ALLORA
- Controllo fuzzy: Mamdani e Sugeno, dal ventilatore al pendolo inverso su un carrello
- Clustering fuzzy: l’algoritmo fuzzy c-means e i punti tra i cluster
- Sistemi neuro-fuzzy (ANFIS): regole fuzzy che imparano dai dati
- Catene di Markov: matrice di transizione, distribuzione stazionaria e PageRank
- Modelli di Markov nascosti: l’algoritmo di Viterbi e il casinò disonesto
- Reti bayesiane: perché l’erba è bagnata e che cosa significa per l’irrigatore
- Filtro di Kalman: come stimare da misure imprecise dove si trova un’auto e a che velocità va
- Tipi di apprendimento automatico: supervisionato, non supervisionato, semi-supervisionato e altri
- Prompt, contesto e RAG: come dare a un modello le informazioni giuste
- Autoencoder variazionali (VAE): immagini nuove da uno spazio latente continuo
- Reti generative avversarie (GAN): il falsario contro il detective
- Modelli di diffusione: come il rumore puro diventa un’immagine
- Processi decisionali di Markov: stati, azioni, ricompense ed equazioni di Bellman
- Q-learning e DQN: imparare il valore delle azioni, dalla tabella alla rete neurale
- Policy gradient e PPO: imparare direttamente la politica
- Come funziona un agente IA: un modello linguistico in un ciclo con strumenti
- Programmare con agenti IA: incarico, test e controllo
- Valutazione e sicurezza dei sistemi di IA: come misurare e come sorvegliare
Programma completo della serie 52 di 83 argomenti pubblicati
- Che cos’è un insieme fuzzy e perché il grado di appartenenza non è una probabilità.
- Come parole come «caldo» o «gradevole» si scrivono con funzioni di appartenenza e come si sovrappongono.
- Come funzionano intersezione, unione e complemento fuzzy e perché non vale il principio del terzo escluso.
Utile sapere prima: Insiemi e relazioni: i mattoncini con cui si costruiscono le definizioni nell’IA, Funzioni e applicazioni: perché ogni modello di IA è una funzione
Quanti granelli di sabbia fanno un mucchio? Un milione di sicuro. Uno di sicuro no. E se da un mucchio togli un granello, è ancora un mucchio — quindi, seguendo questa logica, anche un solo granello sarebbe un mucchio. Questo paradosso lo conoscevano già gli antichi Greci e mostra che molte parole con cui parliamo del mondo non hanno un confine netto: alto, caldo, veloce, quasi pieno. La matematica classica le gestisce male, perché un elemento o appartiene a un insieme o non gli appartiene. Nel 1965 Lotfi Zadeh dell’Università della California a Berkeley propose una soluzione semplice: permettere che un elemento appartenga a un insieme un po’.
Con questa parte comincia il modulo sulla logica fuzzy. Fa seguito alle parti Insiemi e relazioni e Funzioni e applicazioni.
1. Il confine netto e il suo problema
Definizione — funzione caratteristica
Un insieme classico (netto, in inglese crisp) A ⊆ X è determinato univocamente dalla sua funzione caratteristica χA : X → {0, 1}, dove χA(x) = 1 per x ∈ A e 0 altrimenti.
Un insieme netto è un elenco con un sì e un no chiari. Diciamo che «caldo» vuol dire da 25 °C in su. Allora 25 °C è caldo e 24,9 °C no — anche se nessuno noterebbe la differenza. Un confine in un punto preciso è arbitrario e una piccola variazione dell’ingresso provoca un salto nel risultato.
2. Insieme fuzzy
Definizione — insieme fuzzy (Zadeh, 1965)
Un insieme fuzzy A sull’universo X è dato da una funzione di appartenenza μA : X → [0, 1]. Il numero μA(x) è il grado di appartenenza dell’elemento x ad A; formalmente A = {(x, μA(x)) : x ∈ X}.
Un insieme netto è il caso particolare in cui μA assume solo i valori 0 e 1.
Invece di «appartiene, non appartiene» ogni elemento riceve un numero da zero a uno: quanto appartiene all’insieme. 28 °C è «caldo» del tutto (1), 25 °C a metà (0,5), 20 °C per niente (0). In mezzo l’appartenenza cambia gradualmente — nessun salto tra 24,9 e 25.
È importante che cosa il grado di appartenenza non è: non è una probabilità. Se 25 °C è «caldo» con grado 0,5, non significa che ci sia il cinquanta per cento di probabilità che faccia caldo. La temperatura è nota con precisione; vaga è la parola. Della differenza tra la vaghezza di una parola e l’incertezza del caso si occupa la prossima parte.
3. Forme delle funzioni di appartenenza
Definizione — funzioni di appartenenza comuni
- Triangolare con parametri a < b < c: cresce linearmente da 0 in a a 1 in b e scende a 0 in c.
- Trapezoidale con parametri a ≤ b ≤ c ≤ d: cresce da a a b, tra b e c vale 1, scende fino a d.
- Gaussiana: μ(x) = e−(x − m)2 / 2s2 — una collina liscia con centro m e larghezza s.
- Sigmoidale: μ(x) = 1 / (1 + e−a(x − c)) — un passaggio graduale da 0 a 1 attorno al punto c.
La forma si sceglie in base a ciò che è naturale e a ciò che si calcola facilmente. In pratica vincono di gran lunga più spesso triangoli e trapezi: bastano pochi numeri, tutti li capiscono e i calcoli sono veloci. La forma esatta di solito conta meno di quanto sembri — l’importante è dove la funzione comincia, dove raggiunge il massimo e dove finisce.
μ(x) = max( 0, min( (x − a) / (b − a), (c − x) / (c − b) ) )
- (x − a) / (b − a)
- lato sinistro — una retta che in a vale 0 e in b vale 1; dividere per la lunghezza b − a fa sì che il vertice valga esattamente 1 indipendentemente dalla larghezza
- (c − x) / (c − b)
- lato destro — speculare: in b vale 1, in c vale 0
- min
- sceglie il lato che in quel punto sta più in basso — a sinistra di b il lato destro sta sopra 1, a destra di b quello sinistro; così il minimo «taglia» la punta esattamente in b
- max(0, …)
- fuori dall’intervallo (a; c) i lati risulterebbero negativi; il grado di appartenenza però non può scendere sotto 0
trojuhelnik qui sotto. Per «caldo» (22, 28, 34) e 25 °C: min(3/6, 9/6) = 0,5.def trojuhelnik(a, b, c):
return lambda x: max(0.0, min((x - a) / (b - a), (c - x) / (c - b)))
def lichobeznik(a, b, c, d):
def mu(x):
if x < a or x > d:
return 0.0
if x < b:
return (x - a) / (b - a)
return 1.0 if x <= c else (d - x) / (d - c)
return mu
teplo = trojuhelnik(22, 28, 34)
print(teplo(25), teplo(28), teplo(31)) # 0.5 1.0 0.5
4. Variabile linguistica
Definizione — variabile linguistica (Zadeh, 1975)
Una variabile linguistica è una variabile i cui valori sono parole. È data da un nome (per esempio «temperatura»), da un universo X (0–40 °C) e da un insieme di termini (freddo, gradevole, caldo, torrido), ciascuno dei quali è un insieme fuzzy su X.
Le parole con cui descriviamo la temperatura si sovrappongono — e va bene così. 25 °C è un po’ «gradevole» e un po’ «caldo», esattamente come direbbe una persona.
La nostra temperatura ha quattro termini: freddo è un trapezio (0, 0, 6, 14), gradevole un trapezio (10, 17, 23, 28), caldo un triangolo (22, 28, 34) e torrido un trapezio (30, 36, 40, 40). La linea verticale salta tra le temperature di esempio:
- 12 °C è «freddo» con grado 0,25 e «gradevole» con grado 0,29 — una fresca giornata di primavera in cui non si riesce a decidere.
- 25 °C è «gradevole» con grado 0,6 e «caldo» con grado 0,5.
- 31 °C è «caldo» con grado 0,5 e già anche «torrido» con grado 0,17.
Esempio — appartenenze passo dopo passo
Su ogni lato basta il rapporto tra «quanto del lato è già stato percorso» e «quanto è lungo il lato»:
12 °C, freddo (0, 0, 6, 14) sul lato discendente: (14 − 12) / (14 − 6) = 2/8 = 0,25
12 °C, gradevole (10, 17, 23, 28) sul lato ascendente: (12 − 10) / (17 − 10) = 2/7 ≈ 0,29
25 °C, gradevole sul lato discendente: (28 − 25) / (28 − 23) = 3/5 = 0,6
25 °C, caldo (22, 28, 34) sul lato ascendente: (25 − 22) / (28 − 22) = 3/6 = 0,5
31 °C, caldo sul lato discendente: (34 − 31) / (34 − 28) = 3/6 = 0,5
31 °C, torrido (30, 36, 40, 40) sul lato ascendente: (31 − 30) / (36 − 30) = 1/6 ≈ 0,17
Gli altri termini hanno in queste temperature appartenenza 0 — la temperatura sta fuori dal loro supporto.
Nota che le appartenenze di una stessa temperatura non danno necessariamente somma 1 (per 25 °C danno 1,1). Gli insiemi fuzzy non sono parti di un unico intero, ma risposte indipendenti alle domande «fa freddo?», «è gradevole?»…
5. Supporto, nucleo e α-tagli
Definizione — supporto, nucleo, altezza, α-taglio
- Il supporto (support) è {x : μA(x) > 0} — gli elementi che appartengono ad A almeno un po’.
- Il nucleo (core) è {x : μA(x) = 1} — gli elementi che appartengono del tutto.
- L’altezza è supx μA(x); un insieme di altezza 1 è normale.
- L’α-taglio per α ∈ (0, 1] è l’insieme netto Aα = {x : μA(x) ≥ α}. Un insieme fuzzy è convesso se tutti i suoi α-tagli sono intervalli.
L’α-taglio è «quanto vogliamo essere severi». Il taglio al livello 0,5 contiene le temperature che sono gradevoli almeno a metà. Dagli α-tagli si può ricomporre l’insieme fuzzy — sono le curve di livello della collina. E grazie a loro la matematica degli insiemi netti si può usare anche sugli insiemi fuzzy: basta applicarla separatamente a ogni livello α.
Per «gradevole» il supporto è l’intervallo aperto (10; 28), il nucleo [17; 23] e l’α-taglio al livello 0,5 l’intervallo [13,5; 25,5]. L’insieme è normale (altezza 1) e convesso — come tutti i nostri termini. (L’estremo superiore sup nella definizione dell’altezza è il più piccolo maggiorante dei valori; per le nostre funzioni continue su un intervallo chiuso è semplicemente il massimo.)
Aα = [ a + α (b − a) ; d − α (d − c) ]
- α
- il livello del taglio (nella figura la linea ambra) — quanta appartenenza richiediamo; più è alto, più dobbiamo allontanarci dai bordi, e il taglio si restringe
- a
- bordo sinistro del supporto — da qui sale il lato sinistro; per α → 0 il taglio comincia proprio qui
- (b − a)
- larghezza del lato sinistro — su di essa l’appartenenza sale da 0 a 1, quindi raggiunge il livello α dopo aver percorso la frazione α di questa larghezza
- d
- bordo destro del supporto — da qui si misura all’indietro verso sinistra
- (d − c)
- larghezza del lato destro — specularmente: da d percorriamo verso sinistra la frazione α di questa larghezza
Esempio — α-tagli del termine «gradevole» (10, 17, 23, 28)
α = 0,5: [10 + 0,5 · 7; 28 − 0,5 · 5] = [13,5; 25,5]
α = 0,8: [10 + 0,8 · 7; 28 − 0,8 · 5] = [15,6; 24]
α = 1: [10 + 7; 28 − 5] = [17; 23] = nucleo
I tagli sono annidati: più alto è α, più piccolo è l’intervallo, e ogni taglio più alto sta dentro quello più basso. All’indietro l’insieme fuzzy si ricompone come μA(x) = sup {α : x ∈ Aα} — l’appartenenza di un punto è il taglio più alto in cui ancora ricade.
Quando la funzione di appartenenza non è data da una formula, ma per esempio da punti misurati, l’α-taglio si calcola su una griglia fine. È esattamente ciò che fa il programma che disegna le figure di questa parte:
def alfa_rez(mu, alfa, od=0.0, do=40.0, kroku=4000):
body = [od + i * (do - od) / kroku for i in range(kroku + 1)]
uvnitr = [x for x in body if mu(x) >= alfa]
return (uvnitr[0], uvnitr[-1]) if uvnitr else None # per un insieme convesso è un intervallo
prijemne = lichobeznik(10, 17, 23, 28)
print(alfa_rez(prijemne, 0.5)) # (13.5, 25.5)
6. Complemento, intersezione e unione
Definizione — operazioni di Zadeh
μ¬A(x) = 1 − μA(x), μA ∩ B(x) = min(μA(x), μB(x)), μA ∪ B(x) = max(μA(x), μB(x)).
Per gli insiemi netti queste formule danno esattamente il complemento, l’intersezione e l’unione classici.
«Gradevole e allo stesso tempo caldo» è vero quanto è vera la più debole delle due parti; «gradevole o caldo» quanto la più forte. Una catena è forte quanto il suo anello più debole, e quando basta una delle due cose, decide la migliore.
A 25 °C «gradevole e caldo» vale 0,5 e «gradevole o caldo» 0,6. L’intersezione raggiunge al massimo 0,545 intorno a 25,3 °C, dove le due curve si incrociano — nessuna temperatura è del tutto entrambe le cose.
μP ∩ T(x) = min( μP(x), μT(x) )
- μP(x)
- quanto la temperatura x è «gradevole» (nella figura la curva verde)
- μT(x)
- quanto è «caldo» (la curva ambra) — le due appartenenze si calcolano indipendentemente, ciascuna con la propria funzione
- min
- «e allo stesso tempo» può essere vero al massimo quanto la parte più debole — se lo fosse di più, affermeremmo sulla temperatura più di quanto regga una delle due parole; e per i valori 0 e 1 il min dà esattamente la «e» classica
Esempio — dove l’intersezione è massima
Tra 23 e 28 °C gradevole scende e caldo sale, quindi il minimo è massimo dove le curve si intersecano:
(28 − x) / 5 = (x − 22) / 6
6 (28 − x) = 5 (x − 22) ⇒ 168 − 6x = 5x − 110 ⇒ x = 278/11 ≈ 25,27 °C
μ = (28 − 278/11) / 5 = 6/11 ≈ 0,545
A sinistra del punto di intersezione il più basso è caldo, a destra gradevole — lì il minimo scende sempre.
Qui gli insiemi fuzzy differiscono da quelli classici in qualcosa di fondamentale. Per loro valgono quasi tutte le regole note — commutatività, associatività, leggi di De Morgan —, ma non il principio del terzo escluso. L’intersezione A ∩ ¬A non è necessariamente vuota: «gradevole e allo stesso tempo non gradevole» a 13,5 °C vale 0,5. Per le parole vaghe è giusto così — di una temperatura che è gradevole a metà si può dire allo stesso tempo, a metà, che gradevole non è. Altre possibilità di intersezione e unione (le cosiddette t-norme) arriveranno nella parte sulla logica fuzzy.
Teorema — le leggi di De Morgan valgono, il terzo escluso no
Per insiemi fuzzy qualsiasi A, B su X e per ogni x ∈ X con le operazioni di Zadeh vale
- ¬(A ∩ B) = ¬A ∪ ¬B e ¬(A ∪ B) = ¬A ∩ ¬B,
- μA ∩ ¬A(x) ≤ ½ e μA ∪ ¬A(x) ≥ ½, con l’uguaglianza se e solo se μA(x) = ½.
Dimostrazione. (1) Poniamo p = μA(x), q = μB(x) e senza perdita di generalità p ≤ q. Allora 1 − min(p, q) = 1 − p, e poiché 1 − p ≥ 1 − q, è anche max(1 − p, 1 − q) = 1 − p. La seconda legge si ottiene allo stesso modo scambiando min e max.
(2) I numeri p e 1 − p hanno somma 1, quindi il minore è al massimo ½ e il maggiore almeno ½. ∎
Il principio classico del terzo escluso richiede A ∪ ¬A = X, cioè il valore 1 ovunque. Per un insieme fuzzy vale solo dove μA è 0 o 1; va peggio nei punti con appartenenza ½ — per «gradevole» a 13,5 e 25,5 °C, dove A ∩ ¬A e A ∪ ¬A valgono entrambi 0,5.
Verifica su un numero: a 25 °C è ¬(P ∩ T) = 1 − min(0,6; 0,5) = 0,5 e ¬P ∪ ¬T = max(0,4; 0,5) = 0,5.
7. Molto caldo, un po’ caldo
Definizione — modificatori linguistici (Zadeh, 1972)
Concentrazione («molto»): μmolto A(x) = μA(x)2. Dilatazione («un po’», «più o meno»): μun po’ A(x) = √μA(x).
Elevare al quadrato un numero tra 0 e 1 lo rimpicciolisce — e tanto più quanto è piccolo: 0,5 diventa 0,25, ma 1 resta 1. «Molto caldo» è perciò più stretto e più severo di «caldo». La radice invece allarga l’insieme: 25 °C è «caldo» con grado 0,5, «un po’ caldo» con grado 0,71 e «molto caldo» solo con grado 0,25.
Definizione — inclusione di insiemi fuzzy
Un insieme fuzzy A è un sottoinsieme di B (A ⊆ B) se μA(x) ≤ μB(x) per ogni x ∈ X. Per gli insiemi netti è l’inclusione usuale: dove χA = 1, deve essere anche χB = 1.
μ(x)2 ≤ μ(x) ≤ √μ(x) per μ(x) ∈ [0, 1]
- μ2
- «molto» (la curva rossa) — moltiplicare per un numero al massimo 1 non fa mai crescere, quindi il quadrato sta sotto la curva originale; toglie di più ai valori intermedi, lo zero e l’uno li lascia
- μ
- «caldo» da solo (la curva ambra) — il termine di partenza, che i modificatori si limitano a rimodellare; né il supporto né il nucleo cambiano
- √μ
- «un po’» (la curva viola) — la radice è l’inversa del quadrato, quindi solleva ciò che il quadrato schiaccia: √0,25 = 0,5
Esempio — quanto «molto» restringe e «un po’» allarga
L’α-taglio al livello 0,5 per «caldo» (22, 28, 34) è [25; 31]. Per i termini modificati basta riportare il livello alla μ originale:
molto caldo: μ² ≥ 0,5 ⇔ μ ≥ √0,5 ≈ 0,707 → [22 + 0,707 · 6; 34 − 0,707 · 6] ≈ [26,24; 29,76]
un po’ caldo: √μ ≥ 0,5 ⇔ μ ≥ 0,25 → [22 + 0,25 · 6; 34 − 0,25 · 6] = [23,5; 32,5]
L’intervallo «almeno a metà» è largo 6 °C per caldo, circa 3,5 °C per molto caldo e 9 °C per un po’ caldo.
8. Gli insiemi fuzzy nella pratica
- Controllo fuzzy. La metropolitana della città giapponese di Sendai viaggia dal 1987 con un controllore fuzzy che accelera e frena in modo più dolce di una persona. Intorno al 1990 in Giappone seguì un’ondata di lavatrici, videocamere e condizionatori fuzzy. Come funziona un controllore del genere lo spiegherà la parte sul controllo fuzzy.
- Elaborazione delle immagini e clustering. Un pixel al confine tra due regioni può appartenere un po’ a entrambe; il clustering fuzzy assegna i punti a più cluster contemporaneamente.
- Apprendimento automatico. Le uscite morbide dei classificatori o la tecnica del label smoothing (invece del certo «è un gatto», l’obiettivo «gatto con grado 0,9») non sono insiemi fuzzy nel senso di Zadeh, ma condividono con essi l’idea che l’appartenenza a una classe non sia per forza solo 0 o 1.
- Linguaggio. I modelli linguistici lavorano ogni giorno con parole come «abbastanza», «quasi» o «piuttosto no». Gli insiemi fuzzy sono uno dei pochi strumenti che danno a parole del genere un significato preciso e verificabile.
9. Riepilogo
- Un insieme fuzzy assegna a ogni elemento un grado di appartenenza dall’intervallo [0, 1]; un insieme netto è il caso particolare con i valori 0 e 1.
- Le funzioni di appartenenza hanno di solito la forma di un triangolo, di un trapezio, di una collina gaussiana o di una sigmoide.
- Una variabile linguistica ha come valori delle parole — termini che possono sovrapporsi; 25 °C è «gradevole» con grado 0,6 e «caldo» con grado 0,5.
- Supporto, nucleo e α-tagli descrivono la forma di un insieme fuzzy tramite insiemi netti.
- Il complemento è 1 − μ, l’intersezione il minimo e l’unione il massimo; il principio del terzo escluso non vale. Il modificatore «molto» è μ², «un po’» √μ.
Vuoi provarlo con mano? Chiedi a un agente IA di disegnare le funzioni di appartenenza per le parole con cui descrivi la tua giornata — «presto», «tardi», «a lungo» — e chiedi a qualche persona dove metterebbe i confini.
La vedi diversamente? Scrivi a support@coden-app.com.