Riassunto Data and Web Mining
Table of Contents
1. Workflow
1.1. Train-test
1.2. k-fold
Ruotare validation e training set mantenendo invariato il tuning degli iperparametri per valutare la performance del modello
1.3. Stratified sampling
Quando si fa un sampling da un dataset per dividere in training/validation, prendere dati in modo tale da mantenere una proporzione delle classi del dataset originale
1.4. \(Error = bias^2 + Var + \varepsilon\)!
2. Classification
2.1. kNN
k Nearest Neighbor classifier.
A livello di training non fa altro che indicizzare i dati in input (è chiamato lazy learner). Quando gli viene chiesto di predire un risultato, cerca i \(k\) valori più vicini al dato e conta la classe più frequente, dando quella come predizione. In particolare per \(k = \infty\) il kNN ritorna la moda tra le classi.
Ci sono vari modi di definire la distanza e dipende dal problema che si ha in mano. Esempi
- Minkowski : \(d_p(x,y) = \sum_i \left|x_i - y_i\right|^\frac{1}{p}\)
- Generalizzazione delle distanze in \(\mathbb{R}^n\) (euclidea per \(p=2\), manhattan per \(p=1\));
- Coseno \(d(\vec{x}, \vec{y}) = \frac{\vec{x}\cdot\vec{y}}{||\vec{a}||\cdot||\vec{b}||}\)
- differenza di inclinazione tra due vettori, utile ad esempio in text processing;
- Jaccardi \(d(A,B) = 1- \frac{|A \cap B|}{|A \cup B|}\)
- Confronto di un attributo tra tutti i dati, simile al Coseno;
- Hamming
distanza in termini di quanti caratteri sono diversi tra due stringhe binarie.
I kNN sono estremamente sensibili agli outliers.
Potrebbe essere utile scalare i dataset in modo tale da avere le stesse "unità di misura" per tutte le features. In particolare:
- Standard Scaler
- I dati sono normalizzati in modo tale che \(x_i \sim N(\mu_i, \sigma_i^2)\) dove i parametri sono media e varianza delle features;
- Min-max sclaer
- I dati sono normalizzati in un intervallo \([0, 1]\).
2.2. Decision trees
Utilizzati sia per classificazione che regressione. Si costruisce un albero che, a partire dal nodo inziale, compie delle scelte ad ogni passo fino ad arrivare ad una classificazione. Ogni nodo dell'albero corrisponde ad una scelta (binaria e non), mentre ogni foglia corrisponde a una decisione.
Costruire l'albero ottimale è un problema computazionale di classe \(NP-hard\), dunque è necesario utilizare un algoritmo greedy per costruire l'albero. La costruzione dipende dalla scelta di come calcolare il gain e l'errore.
\[Gain(Split|D) = Error(D) - \left(\frac{|D_L|}{Error(D_L)} + \frac{|D_R|}{Error(D_R)}\right)\] Varie tipologie di errore:
- Errore di classificazione
- \(Error(D) = 1 - \max_i p_i\);
- Errore di informazione
- \(Error(D) = Info(D) = \sum_ip_i\log(p_1)\);
- Gain ratio
- \(Error(D) = \frac{Info(D)}{SplitInfo(D)}\); \(SplitInfo(D) = -\sum_i\frac{|D_i|}{|D|}\log\frac{|D_i|}{|D|}\);
- Indice di Gini
- \(Error(D) = 1 - \sum_i p_i\);
- Regressione
- \(Error(D) = MSE(D)\).
2.2.1. Algoritmo di Hunt
- A partire dalla classe più frequente, per ogni feature e per ogni threshold, esegui lo split \(S\) delle feature;
- Calcola il \(Gain(S|D)\) per ogni split \(S\) e seleziona il migliore;
- Se il \(Gain(S|D)\) migliore è zero, l'algoritmo è concluso;
- Ripeti ricorsivamente per ogni split.
2.2.2. Valutazione e selezione dei modelli
Per selezionare il migliore è comodo tenere traccia anche della complessità del modello stesso nei calcoli. \[ErrorGeneral(D, M) = Error(D, M) + \alpha\cdot Complexity(M)\] La complessità potrebbe ad esempio essere il rapporto tra numero di foglie e il numero di nodi.
In genere: Alberi piccoli hanno bias molto alto ma varianza piccola, alberi grossi hanno bias piccolo ma varianza molto alta
2.3. Regressione logistica
Regressione utilizzando la sigmoide come link function. Non c'è molto altro da dire
2.4. SVM
Lo scopo è "disegnare" un iperpiano nello spazio dei punti, ottenendo così una classificazione. Gli SVM offrono solo una classificazione di tipo binario; per classificare tra una categoria non binaria, è necessario utilizzare più SVM in serie. Questo è possibile per il teorema del panino al prosciutto (vorrei star scherzando)
In pratica è come risolvere il seguente problema di ottimizzazione: \[\text{Minimizzare }f(w) = \frac{|w|_2^2}{2} \text{ con vincolo } g(x):\;y_i(w^Tx_i + b) \geq 1\] Se i punti non sono separabili linearmente, è possibile introdurre un "soft margin", tramite un errore: \[\text{Minimizzare }f(w) = \frac{|w|_2^2}{2} + C\sum_ix_i \text{ con vincolo } g(x):\;y_i(w^Tx_i + b) \geq 1 - x_i\]
3. Metodi ensemble
3.1. Bagging
Metodo per ridurre la varianza del modello.
- Dato un dataset grande \(N\), effettuare \(N\) sampling dallo stesso dataset per \(k\) volte, contemplando anche duplicati;
- La probabilità che un dato sia presente più di una volta per \(N\) grande è \(\lim_{n\to\infty} 1 - (1 - \frac{1}{n})^n = 1 - e^{-1} \approx 63\%\);
- Effettuare un training di \(k\) modelli in parallelo sui dataset diversi;
- La predizione totale è la media delle predizioni per tutti i modelli.
3.2. Boosting
Metodo per ridurre il bias del modello.
- Effettuare un training del dataset;
- Trovare i punti che sono classificati erroneamente;
- Creare un nuovo dataset tramite sampling in cui i dati classificati erroneamente hanno più probabilità di essere pescati;
- Ripetere step 1-3 finché non si ha un'accuratezza desiderata.
3.3. Random Forest
Essenzialmente è un bagging modificato per un Albero di Decisione completo, in modo tale da migliorare la varianza di un modello a bias già basso. La tecnica porta a un modello molto efficiente in quanto è possibile costruire alberi in parallelo. Il rischio è avere overfitting.
Una delle differenze dal bagging tradizionale è che per ogni diverso nodo che va a costruire durante il training, per ogni albero parallelo, l'algoritmo seleziona a caso un subset di feaure ogni volta.
4. Feature Engineering
4.1. Encoding
- Scelte binarie diventano \(Bool\);
- Variabili categoriali possono diventare variabili numeriche crescenti;
- Variabili categoriali possono anche essere codificate in One Hot Encoding;
- Variabili numeriche sono mappate a \(\mathbb{R}\);
- Per valori non esistenti, rimpiazzare con media (numeriche) o mediana (categoriali)
4.2. Misure di accuratezza
Siano \(\lambda\) label reale, \(\hat{\lambda}\) label predetto, \(c\) una classe:
- Matrice di confusione (Confusion matrix)
- Tabella con \(\lambda\) nelle righe e \(\hat{\lambda}\) nelle colonne;
- Precisione \(P\)
- Rapporto tra numero di predizioni correttamente classificate come \(c\) e numero di quelle classificate come \(c\);
- Recall \(R\)
- Rapporto tra numero di predizioni correttamente classificate come \(c\) e numero di quelle che sono realmente in \(c\);
- F-measure
- \[ F = \frac{2PR}{P+R}\]
È possibile avere diversi tipi di statistiche sui dati:
- Macrostatistica
- Media su tutti i dati;
- Statistica pesata
- I pesi sono pesati in base al numero di istanze di una classe;
- Apprendimento sensibile ai costi
- Celle diverse della matrice di confusione hanno errori differenti (ovvero non sono sempre \(\pm 1\)).
4.3. ROC e AUC
ROC sta per curva "Receiver Operating Characteristic". L'idea è che è preferibile avere un Recall molto alto, che implica un alto numero di "true positives", opposto ad un numero basso di falsi positivi.
Quindi, in genere per una selezione binaria, si crea un grafico dove si disegna il True Positive Rate contro il False Positive Rate. \(AOC\), ovvero Area Under the Curve, altro non è che una misura di quanto meglio è. per \(AOC = 1\) si ha la situazione ideale (molto bene), mentre per \(AOC = 0.5\) si ha la situazione di selezione casuale (molto male).
5. Text processing
5.1. Text encoding
In genere per processare un documento di testo si può trattare il testo come una sequenza di parole. Si conta la frequenza delle ricorrenze di ogni parola.
Grandezze interessanti:
- Frequenza dei termini nel testo
- \(tf(t) = \#\text{ delle occorrenze di t nel testo}\).
- (no term)
- Numero di documenti contenenti un termine:: \(df(t)\).
- Frequenza inversa nei documenti
- \(idf(t) = \ln{\frac{N}{df(t)}}\).
Si dice stemming il processo di rimozione di suffissi, lemming quello di rimpiazzare una parola composta con la parola primitiva.
5.2. Bayes nativo
Si utilizza il teorema di Bayes per classificare dei documenti (ad esempio per definire se un messaggio di email è spam oppure no) a partire dal contenuto delle proprie parole. \[P(Y|X) = \frac{P(Y)P(X|Y)}{P(X)}\] \[P(C_i|X) = \frac{P(C_i)\prod_jP(x_j|C_i)}{P(X)}\] In generale si assume indipendenza tra le varie \(P(x_i|Y)\).
I valori di \(P(x_j|C_i)\) si possono calcolare in uno dei due modi seguenti:
- Ntive BAyes Multinomiale
- \(P(x_j|C_j)\) è il numero di istanze di \(C_i\) la cui feature j-esima ha valore \(X_j\), tutto diviso per la cardinalità di \(C_i\);
- Native Bayes Gaussiano
- Assumere che \(P(x_j|C_i) \sim N(\mu_D, \sigma_D^2)\).
Onde evitare che l'assenza di un termine provochi il "collasso" del metodo, si applica la coorezione di Laplace, ovvero si aggiunge 1 a tutte le le istanze onde evitare l'esistenza di zeri. Durante il training si salta un valore non trovato, mentre testando si assume una disribuzione \(P(x_j|C_i)\) uguale per ogni \(C_i\).
Spesso si trasformano i \(P(C_i|X)\) per motivi di stabilità numerica e computazionale.
6. Ranking
6.1. NDCG@K
"Normalized Discounted Cumulative Gain". Usato generalmente per dare una misura della qualità dei motori di ricerca.
Il principio è cercare i primi \(k\) documenti e sommare assieme il loro contributo (gain \(G(r)\)); più avanti nella pagina stanno, meno significatività hanno (descritto dal termine discount \(D(r)\)). \[NDCG = \sum_r \frac{2^r - 1}{\log_2(1+r)} = \sum_r G(d_r)\cdot D(r)\]
6.2. Generazione dei label
Generare il ranking \(r\) non è facile. Si può
- Chiedere agli utenti di dare un voto ai risultati di ricerca
- Processare gli input (fissazione, click, riformulazione della ricerca…) come indicazione
- Tracciare il movimento degli occhi
- Chiedere un feedback agli utenti per i primi due risutati
6.3. PageRank
Algoritmo usato da Google per determinare un ranking delle pagine web da mostrare.
Funziona contando il numero e la qualità dei link a una pagina per stimare quanto importante sia una pagina. L'assunzione è che siti web più importanti hanno più probabilità di avere link esterni da altri siti web.
7. Artificial Neural Networks
7.1. Neurone artificiale
Un vero neurone è qualcosa con numerosi input (dendriti) e un solo output (assone).
Allo stesso modo un neurone artificiale è una funzione di numerosi input (vettori e matrici)e un solo output. A differenza dei neuroni naturali, questi sono deterministici.
7.1.1. Apprendimento
- Fai una predizione (Forward)
- Misura l'errore (Loss)
- Modifica i parametri (Backpropagation)
- Ripeti per ogni istanza (Batch)
- Ripeti per molte volte (Epochs)
7.2. Deep Learning
Utilizza molti layer nascosti di neuroni tra input e output, utilizzando il metodo Gradient Descent (con un learning rate) per trovare un minimo della funzione di loss, possibilmente un minimo globale. Si possono usare diverse strategie per ottimizzare il processo:
- Stochastic Gradient Descent (SDG)
- utilizza metodi di random sampling per la risoluzione del problema del Gradient Descent
- Metodo dei momenti
- Ottimizzazione del layer di neuroni in sé
Esiste un teorema chiamato Universal Approximation Theorem che dice che un network composto da trre layer con abbastanza nodi nascosti può approsimare qualsiasi funzione continua.
Utilizzando funzioni di attivazione non lineari, il modello riesce a imparare anche funzioni non lineari.
La funzione di loss serve a misurare l'errore tra la predizione e il valore vero. Esistono vari modi in cui definirne una, tra cui:
- \(MSE\) o anche \(MAE\) per problemi di regressione;
- Crossentrpy binaria o categorica per problemi di classificazione
I Convolutional Neural Networks (CNN) sono delle reti particolari in cui all'interno sono presenti neuroni che effettuano l'operazione matematica della convoluzione. Sono usati ad esempio nei problemi di classificazione di immagini.
7.3. Overfitting
Quando un Neural Network si adatta troppo ad un dataset, l'accuratezza del training aumenta ma l'accuratezza nel test diminuisce. Succede per varie ragioni:
- Il modello è troppo complesso e non ci sono abbastanza dati
- Il dataset di training e test non sono campionati correttamente
Pe ril primo caso, se non si può semplificare il modello, occorre aggiungere più dati ed espandere il dataset (data augumentation). Inoltre si possono utilizzare dei dropout per avere dei pesi più generici.
Un dropout altro non è che scollegare un certo numero di neuroni a caso dalla rete neurale.
7.4. Transfer learning
Il processo di utilizzare uno o più layer di neuroni su cui è già stato fatto il training in un altro modello, facendo semplicemente un fine-tuning dei parametri in modo tale da poter cambiare obbiettivo in output o anche numero di classi in input.
7.5. 11 Raccomandazioni
- Scegliere la misura della qualità all'inizio del lavoro
- Cosa mi interessa che classifichi? Quanto accurata?
- Fissa il processo di valutazione
- Training e testing sempre uguali
- Prepara i dati
- In forma matriciale, scegli gli encoding…
- Trova un caso base "ovvio"
- Ad esempio la classe più prevalente
- Trova un caso base migliore
- Ad esempio fai una classificazione lineare
- Costruisci un modello
- Stai attento alla funzione di loss e all'ultimo layer di attivazione (nel dubbio ReLU e rmsprop)
- Lascia che il modello vada in overfitting
- Per essere sicuro che stia effettivamente imparando qualcosa
- Sistema l'overfitting
- rimuovi layer, aggiungi dropout, aggiungi dati, sistema la dimensione della batch…
- …
- 😳
- Profit!
- Il modello funziona
- Se necessario, crea un modello nuovo da zero
- Ci sta rifare da capo
8. Clustering
8.1. Obbiettivi e misurazioni del clustering
L'obbiettivo è raggruppare oggetti simili o relazionati tra loro e oggetti sufficentemente diversi in altri gruppi. L'analisi dei clustering serve a trovare similarità tra i dati.
Il clustering è un tipo di unsupervised learning, ovvero un modello che non ha informazioni sulle classi del dataset. Potrebbe essere che si conoscono ma non si vogliono fornire al modello, oppure non si sanno proprio. Può essere usato come una cosa a sé stante oppure come preprocesso ad altri algoritmi.
Un buon clustering ha una alta similarità tra gli oggetti della stessa classe e una grande differenza dagli oggetti delle altre classi. La qualità dipende moltissimo dalla qualità della misura della similarità, l'algoritmo e la sua abilità a trovare pattern.
Se le classi vere non si conoscono, è difficile misurare la qualità. Inoltre, per spazi ad alte dimensioni, i punti sono più vicini (fenomeno detto curse of dimensionality).
Ci sono molte cose da tenere in considerazione:
- Criteri di partizionamento
- Livello singolo o gerarchico
- Separazione dei cluster
- Esclusivo (ad ogni cluster corrisponde una classe) oppure non esclusivo, (classi multiple con livelli differenti, anche detto fuzzy)
- Misure di similitudine
- Ad esemipio, basate sulla distanza o sulla connettività dei punti
- Spazio di clustering
- Spazio completo oppure un sottospazio dei dati (ad esempio, usato per dati in alte dimensioni)
Le distanze possono essere dipendenti (Minkowski) oppure invarianti (coseno, correlazione) rispetto alla scala del problema.
8.2. Approcci di partizionamento
Costruisce delle partizioni dei dati e le analissa basandosi su un criterio (chiamato la distanza). La soluzione esatta è un problema \(NP-hard\), quindi spesso si utilizza un approccio euristico: minimizzare una funzione obiettivo (come ad esempio minimizzare \(\sum_{a,b\in C} (d(b) - d(a))^2\), la somma dei quadrati delle distanze all'interno dello stesso cluster \(C\)).
8.2.1. k-Means
L'algoritmo consiste in questi passaggi:
- Fissare una misura della distanza tra i punti;
- Scegli \(k\) punti nello spazio casuali (i "centroidi");
- Assegna punti ai \(k\) cluster, in modo tale a minimizzare l'errore (ovvero, assegna punti in base al centroide più vicino);
- Sposta i centri che minimizzano l'errore (ovvero, sposta i centroidi nel punto medio dei cluster);
- Ripeti dal 3.
La complessità asintitica dell'algoritmo è \(O(knt)\) con \(t\) numero di iterazioni, \(k\) numero di cluster e \(n\) numero di iterazioni, considerato inoltre che \(k << t \land k << n\). L'algoritmo è molto efficiente ma è molto sensibile agli outlier e non funziona bene con cluster non sferici e spazi non continui.
- k-Means++
Una variazione dell'algoritmo k-Means, dove nella fase iniziale scegli il primo centro random, scegliendo i rimanenti a distanza proporzionalmente crescente rispetto al centro più vicino (più distante è più probabile).
- k-Medioids
L'algoritmo è uguale al k-Means, solo che si utlizza un centro che è anche un punto del dataset; è un modo per renderlo più resistente agli outliers.
- Grafico a gomito (Elbow plot)
Strumento per determinare quale sia il valore di \(k\) ottimale da utilizzare. Si sceglie il \(k\) dopo il quale la differenza tra gli \(SSE\) non è vantaggiosa (ovvero "sul gomito" del grafico).
8.3. Approcci gerarchici
Si crea una decomposizione gerarchica del dataset per poi selezionare un certo numero di tagli del dataset. Anche questo metodo usa una distanza o una matrice di similarità.
L'approccio può essere agglomerativo (costruisce, bottom up) oppure divisivo (taglia, top down).
8.3.1. Hierarchical Agglomerative Cluster
- Inizializza ogni punto come se fosse un cluster a sé stante;
- Unisce i cluster più vicini in termnini di distanza o similitudine;
- Ripeti finché non c'è un solo cluster
L'algoritmo è chiaramente agglomerativo. La sua complessità è \(O(n^3)\) per la soluzione naive, ma può scendere a \(O(n^2\log n)\) utilizzando un min-heap e a \(O(n^2)\) con un single linkage.
Gran parte dell'ottimizzazione avviene nella scelta della distanza da computare tra i diversi clusters (anche detta linkage):
- Single lnkage
- Distanza minima, spesso sovrastima la similiraità;
- Complete linkage
- Distanza massima, spesso sottostima la similarità;
- Average linkage
- Distanza media, similarità più ottimale;
- Centroid o Medioid linkage
- Come il caso average linkage, ma molto più efficiente;
- Ward linkage
- Utilizza l'incremento della somma dei quadrati degli errori.
Per vedere come i cluster si agglomerano nel tempo, si utlizza un diagramma particolare chiamato dendogramma, che disegna un albero mostrando ad ogni step come sono suddivisi i cluster.
8.4. Approcci di densità
Questi approcci si basano sull'utilizzo di una funzione di densità e sulla connettività tra i punti. Il vantaggio è l'arbitrarietà delle forme dei cluster e una minore suggestività agli outlier.
8.4.1. DBSCAN
Densitiy Based Spatial Clustering of Applications with Noise.
L'algoritmo seleziona i punti nelle regioni più dense e le unisce, scartando gli outlier. Definizioni varie:
- Un punto è detto core point se ci sono almeno \(m\) punti con una distanza minore di \(\varepsilon\) dal punto
- Un punto \(q\) è direclty density reachable da \(p\) se \(p\) è un core point e \(d(p,q)<\varepsilon\);
- Un punto \(q\) è densitiy reachable da \(p\) se esiste una successione di punti \(p_1, \dots, p_n\) che sono directly density reachable in successione tra loro;
- Un punto \(q\) è density connected a \(p\) se esiste un punto \(o\) tale che enteambi \(p,q\) sono density reachable da o.
- Un cluster è un insieme di punti density connected.
L'algoritmo ha complessità \(O(n \log n)\) se si utilizza un indicizzazione spaziale.
Pro: L'algoritmo è poco sensibile al rumore e permette di avere cluster di forma qualsiasi, non solo circolare.
Contro: L'algoritmo è più complesso nel senso che ci sono due iperparametri - Il numero minimo di punti \(m\) e il raggio \(\varepsilon\).
8.5. Valutazione dei clsuter
8.5.1. Intrinseca
Non si sanno label e classi dei cluster, quindi è necessario valutare quanto simili sono i cluster tra loro e diversi dagli altri
- Intra-class similarity
- \(a(o_i) = \sum_C \frac{d(o_i, o_j)}{|C| - 1}\).
- Inter-class similarity
- \(b(o_i) = \min_C\sum_C \frac{d(o_i, o_j)}{|C|}\).
- Coefficiente di silhouette
- \(s(o_i) = \frac{b(o_i) - a(o_i)}{max(a(o_i), b(o_i))}\). Nota che \(s(o_i) \in [-1,1]\). Più alto è, meglio è
8.5.2. Estrinseca
Il valore dei label e classi è conosciuto.
- Tabella di contingenza
- True Negative \(T_-\), True Positive \(T_+\), False Negative \(F_-\), False Positive \(F_+\).
- Statistica rand
- \(RAND = \frac{T_+ + T_-}{T_+ + T_- + F_+ + F_-}\).
- Coefficiente di Jaccard
- \(JACC = \frac{T_+}{T_+ + F_+ + F_-}\)