Sei sulla pagina 1di 38

Support vector machines

Idea di base:
- Usa problemi di ottimizzazione di quadriche per evitare il problema dei minimi locali delle
reti neurali.
- Usa le tecniche chiamate “Kernel functions” per poter separare funzioni non lineari
- Il risultato è un algoritmo di ottimizzazione e non di greedy search

Dataset sono costituiti da un insieme di campioni descritti da una label classe e delle features, la
kabel ci consentedi classificare, o fare regressioni. Da questo vogliamo estrarre un modello per
predirre nuovi casi per cui non conosco la classe.
I dati possono essere rappresentati in uno spazio(N dim) dove gli assi sono i feature(N), un vettore
che collega l’origine al punto rappresenta un istanza di dati.

A cosa servono i vettori?


Supponiamo di avere un problema di classificazione binaria, come
posso separare le classi con un boundary? Dati i gruppi di dati posso
definire rete/funzioni non lineari per decidere a quali dati assegnare
una classe dare, nello spazio dei features ho piani ecc..

Rivedi operazioni dei vettori


equazione iperpiano
I punti dell’iperpiano hanno prodotto
scalare w x =0

cos’è un iperpiano?

Il vettore dei pesi w è detto vettore


normale, punta nella direzione del
nostro piano e gli è ortogonale.
Possiamo usare questi iperpiani come
decision boundary, quelli che hanno un
valore <0 hanno una certa classe, quelli
>0 un’altra.

I quadratic programming sono problemi che si basano su problemi convessi che possono essere
risolti in modo efficiente visto che non hanno minimi locali.
Se non ho vincoli il minimo sta nel vertice della parabola, se avessi un vincolo lineare allora vedo i
punti di intersezione e valuto quello a valore minore.
Questi problemi sono alla base della SVM
Imagine a situation where you have a two classes classification problem with two predictors X1 and
X2 . Suppose that the two classes are “linearly separable” i.e. one can draw a straight line in which
all points on one side belong to the first class and points on the other side to the second class.
Un buon separatore è un iperpiano ottimo ovvero che si posizione in un punto medio fra i 2 insiemi,
e col kernel function posso applicarlo anche a problemi non lineari.

Support vector machines

Se abbiamo un problema di classificazione binaria vogliamo trovare un iperpiano che separi le classi
nel features space, vogliamo per ora considerare problemi di classificazione binaria linearmente
separabili, però non sempre lo sono e nel caso:
• We soften what we mean by “separates” , and
• We enrich and enlarge the feature space so that separation is possible.

Abbiamo un 2 insiemi, però ci sono


infiniti modi per separarli, come
trovo l’iperpiano?
Determino un margine come la
distanza minima fra i 2 punti più
vicini delle 2 classi.
il support vector è un iperpiano di
margine. da cui si prende la distanza
rispetto al separatore.
come formulare il problema matematicamente

dato il separatore lineare si


definiscono i 2 insiemi a cui
assegnare un certo valore di
classe.
l’iperpiano è W X +b
=0

si costruiscono le disequazioni
dei margini di supporto per dire
il valore delle classi.

il gap risulta marginex2 =2)||W||


il margine è 1/||W||
per avere un gap più ampio bisogna
minimizzare ||W||, oppure passo
alla sua primitiva ½||W||^2
il nostro problema ora è una minimizzazione
della funzione quadratica soggetta al vincolo
che ha:
yi classi dei dati xi(features),
b, w iperparametri, n elementi del dataset
vengono risolte molto efficacemente con
problemi di ottimizzazione.
questa è la formulazione primale di un
support vector lineare

quindi i 2 support vector risultano le 2 equazioni di prima solo con l’uguaglianza


il margine come detto è 1/||W||

cosa succede con più feature?


nello spazio ho un piano, il 4d ho un iperpiano ecc…
esempio pratico:
ho 3 punti di 2 classi diverse, come trovo i support vector? per i punti ci classe 1 uso la prima eq, per
i punti di classe -1 uso la seconda eq, ho 3 eq in 3 incognite e posso risolverle
classi non separabili

in genere le classi non sono sempre linearmente separabili, non sempre è rispettato, e come
gestiamo queste situazioni? in questi casi cerco il piano migliore anche se conterrà dei punti
classificati male

un altro problema è che i dati possono essere rumorosi, se il rumore è negli elementi che non
costituiscono il support vector allora non danno problemi, se influenzano la support vector possono
modificare la support vector stessa. come gestisco questi casi?
uso un soft margin ovvero i punti possono sforare di una cerca quantità epslon dal supporto, e nella
funzione da minimizzare penalizzo con una somma di tutti gli epsilon moltiplicati per una costante
C, se epsilon è zero allora è il caso base, C indica quanto è importante l’epsilon, di solito va fra 0.1 e
100. se C è grande penalizza troppo. The support vector classifier maximizes a soft margin.

il fatto di limitarci al support vector, ha un vantaggio computazionale importante perché se ho


miglioni di dati ma i dati importanti sono solo i support vector, il costo computazionale è il fatto di
dover soddisfare i support vector, quindi la SVM si concentra solo su alcuni punti e non tutti, buon
vantaggio.
la figura più vincolata con
C=100 è la c,
la meno vincolata è il b, con
C=0.1
cambia l’ampiezza del
margine, più stretta con C alto
se le features hanno scale
diverse allora vado a fare una
normalizzazioene per poter
usare le SVM

problema duale

il duale ha una massimizzazione rispetto agli alfa(moltiplicatori di lagrange generalizzati).

ho una sommatoria
degli alfa i meno
un'altra sommatoria,
ed è soggetta a dei
vincoli.

w è dato da alfa i yi xi
in genere il duale fornisce una soluzione lower bound rispetto alla soluzione ottima del primale,
però sotto alcune condizioni il gap fra le due soluzioni è zero, e quindi la soluzione ottima del duale
è la stessa del primale
qua le sommatorie sono su N grande ovvero numero di campioni, prima erano su n piccolo, num
features, quindi il
duale è più comodo
nei casi in cui i vari
campioni hanno un
numero di features è
molto più grande del
numero di samples.

kernel function

i moltiplicatori di lagrange che ci danno problemi sono quelli diversi da zero, perché sono quelle che
indicano dove si trova il support vector.
il nostro sistema quando risolve il sistema duale trova i vari alfa i, e con questi può trovare
l’equazione di margine che separa linearmente i nostri punti, ma nella pratica i problemi non sono
facilmente linearmente separabili, problemi non lineari(es xor)
quando il numero di campioni non è molto grande le SVM gestiscono bene le separazioni, però certe
volte può non funzionare se la separazione da fare è non lineare.
posso introdurre nuove features con la features expansion per aumentare la dimensione dello
spazio.
la Feature Expansion che amplia lo spazio delle features includendo trasformazioni di queste. Si
passa da uno spazio p dimensionale ad uno p’ dimensionale con p’>p. La conseguenza è che si
hanno margini e separatori non lineari.
ora il problema è come fare questa trasformazione
Example: Suppose we use (x1 , x2, x1^2 , x2^2 , x1x2) instead of just (x1 , x2 ). Then the decision
boundary would be of the form
con equazione:
succede che in 5 dimensioni ho un iperpiano
separatore, ma nelle 2 dimensioni iniziali si
traduce in una funzione non lineare
la funzione fi trasforma uno spazio x in uno
spazio X più grande.
il problema è quanto dobbiamo espandere il
nostro piano?dipende dai nostri dati. lo
decidiamo con il kernel function

se facciamo un espansione polinomiale allora andremmo ad avere una dimensione che cresce
esponenzialmente.
una kernel function è una funzione che fa la features expansion di xi e xj, e fa il prodotto scalare.

Informally a kernel function is a special similarity measure k ∶ 𝒳 × 𝒳 → ℛ between patterns lying in


some arbitrary domain 𝒳, which represents a dot product, denoted by ⟨⋅, ⋅⟩, in some Hilbert space.
la kernel fuction ci fa passare da un features space x a uno più grande Xe ne fa il prodotto scalare.
proprietà delle kernel function

vale il teorema di mercer


a noi non interessa la
fi ma il K da usare
kernel trick: Instead of performing the expensive transformation step explicitly, the kernel can be
calculated directly, thus performing the feature transformation only implicitly.
con questo trick valgono le proprietà precedenti, es funzioni:

rivedi
noi applichiamo una fi implicitamente grazie a una kernel function, non scegliamo la fi, ma
prendiamo un kernel per poi fare i calcoli, il kernel ha dei parametri(gaussioano, sigmoidale ecc )

il kernel polinomiale è suscettibile a overfitting


che kernel devo usare?
di solito si vede cosa succede col lineare, però uno di quelli più usati è il gaussiano
• The recommended approach is to try a RBF kernel first, because it usually works well.
• However, it is good to try the other types of kernels if you have enough time to do so.
• A kernel is a measure of the similarity between two vectors, so that is where domain knowledge
of the problem at hand may have the biggest impact.
• Building a custom kernel can also be a possibility, but it requires that you have a good
mathematical understanding of the theory behind kernels.

cosa succede se ho più classi?


Le svm lavorano con 2 classi, facendo una separazione binaria, se ho più classi posso usare te
tecniche one vs one e one vs all.

Ova: one vs all(rest)

Abbiamo più classi ed un classificatore binario, dico che una classe ha un certo valore e tutte le altre
ne hanno un'altra uguale, faccio le support vector per tutte le k classi.

• In order to classify K classes, we construct K different binary classifiers. For a given class, the
positive examples are all the points in the class, and the negative examples are all the points not in
the class.
• In order to make a new prediction, we use each classifier and predict the class of the classifier if it
returns a positive answer.
• However, this can give inconsistent results because a label is assigned to multiple classes
simultaneously or to none.

Si hanno problemi quando dei punti possono essere classificati con più classi, e come faccio a
risolvere?
Posso vedere la distanza dai 2 margini e prendere quello con distanza massima, c’è anche il
problema che ci sono anche zone mai assegnate, però posso fare delle scelte deterministiche dove
tutti i punti sono massimamente distanti dai margini

Problemi
• Different classifiers were trained on different tasks, so there is no guarantee that the quantities
returned by the decision function have the same scale.
• Training sets are imbalanced: for a problem with 100 classes, each having 10 examples, each
classifier will be trained with 10 positive examples and 990 negative examples. Thus, the negative
examples will influence the decision boundary greatly.

Il problema è che si va a favorire sempre la classificazione composta da più insiemi.


Ma in genere l’ova è facile da implementare e capire, è compuitazionalmente leggero, con k classi
ho k classificatori.

Ovo one vs one


Costruisce k*(k-1)/2 coppie di classificatori contrariamente all’ova, qua per ogni classe la confronto
con tutte le altre classi individualmente.
Però il problema di classificazione risulta più leggero visto che confronto meno elementi
Se k non è troppo grande meglio OVO
• One-versus-One: train one classifier per pair of classes, which leads to K(K-1)/2 classifiers for K
classes. Each classifier is trained on a subset of the data and produces its own decision boundary. •
Predictions are made using a simple voting strategy.
• Each example we wish to predict is passed to each classifier, and the predicted class is recorded.
• The class having the most votes is assigned to the example.
Una volta fatto tutte le classificazioni contiamo gli elementi a quale classe appartengono, e vedo la
maggioranza per scegliere. Con k grande difficilmente non ho pareggi(problema dei pareggi)
Una tecniche è quella di usare l’indice più piccolo quando ci sono dei pareggi.
Ensemble methods

Noi abbiamo addestrato il nostro


sistema e quando abbiamo una nuova
istanza, e tutti i classificatori danno una
loro classificazione, alla fine si ha un
meccanismo di voting finale per dire
quale classe ha la nuova istanza.
Possiamo cercare di addestrarci su
dataset diversi.

BIAS VS VARIANCE TRADEOFF


L’errore che ci aspettiamo dipende da un bias, una varianza e un rumore dovuto ai dati, su
quest’ultimi non possiamo farci niente.
Bias= errore introdotto andando ad approssimare il problema reale con un modello matematico(dt,
svm ecc)
Varianza= errore dovuto ad un particolare traning set usato
In base al modello scelto avremo un certo grado di accuratezza nell’approssimare i dati
1)Meglio cubica
2) meglio lineare
3) quadrica

MSE errore totale, la linea sull’1 è quello


legato alla rumorosità e non varia, l’errore
azzurro legato al bias tende a diminuire
all’aumentare della flessibilità del
sistema, se il modello è + flessibile allora
posso gestire problemi più complessi,
però comporta un rischio di overfitting
maggiore e quindi la variance, quindi
bisogna trovare un compromesso fra
flessibilità e gestione della varianza, se i dati d’ingresso sono lineari allora conviene un modello
semplice e lineare, se ho una relazione complessa mi serviranno funzioni complesse e quindi bisogna
cercare di ridurre la componente legata al variance.
Se ho un solo modello il rischio di avere una variance alta è elevata, in genere si usano più modelli
semplici indipendenti per tenere la variance bassa, può non essere efficace, es: chiedo a 50 esperti
che dicono la stessa cosa oppure 1 solo esperto, ma se dicono la stessa cosa conviene chiedere solo
al singolo.
Se abbiamo più esperti devono essere bravi solo in certi ambiti, e non su tutto per non avere sempre
la stessa risposta.

Come rendere i classificatori diversi fra loro? Dobbiamo addestrarli su gruppi di dati diversi, questa
è l’idea del bagging.

Bagging (bootstrap aggregation)

Ogni classificatore si addestra su dataset diversi, se il mio dataset ha 10^6 elementi, e ho 10


classificatori, creo 10 dataset da 10^5 elementi scelti a caso.
La tecnica del default invece consiste di fare un campionamento con reinserimento, ovvero può
capitare che i dati sotto insiemi di dataset abbiamo dei valori comuni.
Il numero di elementi duplicati sono circa il 37%, così i nuovi dataset non saranno mai uguali, potrei
avere 100 classificatori sempre da 10^5 elementi ciascuno.
Generalmente come classificatore si usano i determination tree perché sono veloci da addestrare,
l’unica cosa importante è che l’algoritmo di classificazione non sia troppo stabile, ovvero che anche
perturbando di tanto i dati questo non dia sempre la stessa risposta, in genere combinando diversi
classificatori instabili si hanno classificatori migliori.

Il bagging va a ridurre la varianza sui nostri dati, in genere funziona molto bene, perché usiamo
tecniche con replacement, ovvero creo nuovi dati attraverso campionamenti, può aiutare se i dati
sono rumorosi.
algoritmo
dato un dataset con n istanze, faccio t iterazioni, e scelto un training set con replacement, o
senza(pasting),applico l’algoritmo di apprendimento e salvo
la classificazione va fatta con voting o soft voting

alla fine il bagging crea un regressore per ogni classificatore, e infine fa la media per trovarne uno
finale.
Tecnica out of bag evaluation
Sapendo che nel bagging il 37% dei dati in un sottoinsieme sono duplicati, e che quindi c’è un 37%
di dati non duplicati inutilizzato non duplicato, potrei usarli alla fine validation set

Random Patches and Random Subspaces


possiamo introdurre della randomizzazione andando a lavorare sulle features dei dati in ingresso, lo
faccio su un sottoinsieme dei dati del dataset, e forzo un classificatore a lavorare su un sottoinsieme
di features, può essere fatto impostando un filtro che mette le features =0, e un classificatore
considera solo quelle con valori diversi da zero.
quando si lavora sui dati di training e feature si parla di metodi chiamati random patches, invece se
manteniamo tutti i dati di ingresso e lavoriamo solo sulle features si chiama metodo random
subspaces.

random forest
i metodi random forest si basano sugli alberi di decisione, mentre i bootstrap non hanno questo
vincolo.
si basa sul bagging con reinserimento e introduce un campionamento sulle features non fin
dall’inizion ma ad ogni split dell’albero di decisione, è un ulteriore randomizzazione rispetto a prima.

Algoritmo
dato un training set S, ciclo da i a k subset, costruisco i sottoinsiemi Si campionati con replacement
e apprendo l’albero Ti su Si, e a ogni nodo seleziono un sottoinsieme casuale delle mie features(sqrt
delle |feature|) , l’albero viene esteso al massimo senza prouning, per mantenere l’instabilità.

la randomizzazione è in 2 parti, nel campionamento con reinserimnto e nello split.


usare i sottoinsiemi da altri benefici?
la velocità di costruzione visto che non valuta tutte le features
Questa tecnica porta a livelli molto alti di accuratezza anche su dataset molto grandi. Inoltre, può
lavorare senza difficoltà anche su problemi con migliaia di variabili in input senza necessità di
cancellarne alcuna fornendo in più una stima di quali siano quelle più importanti(se riducono di
molto l’impurità) per la classificazione. Si ha anche una forte resistenza ai dati mancanti.
le random forest servono a capire l’importanza delle features, anche se esistono altre tecniche per
farlo.

Extra trees
sono delle random forest ancora più randomizzate, bootstrap di default è disattivato, alla seconda
randomizzazione non scelgo di splittare in base allo split migliore(come le random forest), ma splitto
in modo casuale.
Qual è il vantaggio?
risulta molto più veloce perché splittando a caso non devo fare i confronti dei vari indici di gini per
poi scegliere.
Boosting
l’idea è quella di definire un modello iterativo, lo fa avendo un sistema di voting/averaging,però
vengono dati dei pesi ai modelli in base alla loro performance, l’idea è quella di creare prima un
modello che sa classificare i dati, il primo avrà il suo errore di classificazione/regressione, il secondo
in cascata dovrà essere più bravo nei casi in cui il primo non funziona molto bene, il terzo si addestra
dove il primo e second o non vanno bene.
ogni modello deve essere un esperto di un settore dove gli altri non sono bravi, devono essere in
cascata er complementari, se l’errore non migliora allora posso fermarmi.
dato un training set d’ingresso alleno il primo classificatore e associo dei pesi che indicano quali dati
non vanno bene, il classificatore successivo si addestra su questa parte, e così fino alla fine, di volta
in volta il peso diventa sempre maggiore.

Boosting for Regression Trees algorithm


inizialmente il nostro classificatore f da sempre zero, poi definisco gli ri=yi e ciclo fino a B(num
classificatori).uso come funzione di regressione degli alberi di decisione con pochi livelli e pochi nodi
foglia che si addestra sui dati e valori residui(inizialmente sono i dati d’ingresso, poi quelli che vanno
male), una volta costruito il primo classificatore, quello successivo è quello precedente (inizialmente
zero) + lambda che è il nostro learning rate + il classificatore costruito finora.
l’errore rimanente è ri(quello precedente) – la predizione del nuovo modello *lambda. il ciclo viene
ripetuto fino a che non ho raggiunto il numero max di classificatore.
l’output è la sommatoria pesata rispetto a lambda(se <1 i valori vengono ri-scalati per fare piccoli
passi di addestramento) delle classificazioni.
il boosting si presta alla realizzazione? no perché devo alimentare i nuovi classificatori con i dati
precedenti. i classificatori sono sequenziali, e non in parallelo, sconveniente.
ADA Boost
nella classificazione non abbiamo direttamente gli errori residui, intesi come valori reali, si
definiscono pesi associati ai nostri elementi(istanze) del training set.
l’ADABoost da dei pesi alle istanze, inizialmente è 1/m con m=|training set|, a questo punto si
applica un algoritmo di addestramento che lavora su un dataset pesato, gli alberi di decisione vanno
bene per fare ciò, computo un error rate pesato: somma di tutte le misclassificazioni wj rispetto alla
somma di tutti i pesi. rj va fra 0 e 1, rj deve essere basso di solito, calcolo il predictor’s weight.
aggiorno il peso dell’istanza che abbiamo sbagliato e infine normalizziamo rispetto alla norma di wi
complessivo, ripeto tutto per n iterazioni

es rj=4, eta=1 -> ai=1*log(1-0.4)/0.4=log(6/4)


quindi i nuovi pesi verranno aumentati per 6/4, le giuste rimangono uguali, quando normalizzo,
quelle corrette si abbassano.
dato un nuovo valore come prediciamo la sua classe? scegliamo la classe che ottiene la maggioranza
dei voti in base ai pesi.

decision stump: alberi di decisione con un singolo split, sono dei weak learner, uniamo molti alberi
per avere uno strong learner.
l’adaboost necessita di algoritmi che possano gestire i pesi, oltre agli alberi posso adattare altri
algoritmi per lavorare coi pesi:
quando scegliamo quale elemento prendere dal training set da dare al classificatore i, campiono in
base ai pesi campionati finora, chi ha i pesi più alti è più probabile che verrà inserito nel training set
del classificatore i, lo svantaggio è che non tutte le istanze non vengono usate, dalla teoria si vede
che il training error decrementi in modo esponenziale, non servono molti classificatori.
funziona se uso weak learner che concatenati mi danno uno strong learner, e se il loro errore non
cresca troppo velocemente, se si usano classificatori troppo complessi si ha un forte rischio di
overfitting proprio perchè essendo un modello in cascata le complessità dei singoli modelli vanno ad
accumularsi e si genera un bias molto forte.

cosa succere se rj vale zero? non posso andare avanti e mi fermo, oppure posso permettere di
aggiungere nuovi classificatori per cercare di migliorare le performance, però il Boosting si va spesso
in overfitting e bisogna stare attenti.

gradient boosting

Noi usiamo il gradiente degli errori commessi per definire il nuovo classificatore in modo regressore.
Abbiamo un Regressore F definito dalla somma di vari regressori.ad ogni passo si costruisce questo
Regressore totale che vuole ridurre i vari errori. questi residui rn sono y-fn con y funzione da
apprendere, e fn classificazione del regressore corrente.
Se rn non è ancora =0 posso pensare di aggiungere un nuovo regressore che cerca di correggere gli
errori commessi in precedenza, anche lui porà però commettere errori, ma se predice più
correttamente di quanto sbagli allora le prestazioni migliorano.

come è correlato alla discesa del gradiente?


Si definisce una Loss function come differenza del valore reale – quello da predirre, tutto al quadrato
e diviso 2
Vogliamo minilizzare la sommatoria di tutti i loss function, gli F(xi) li possiamo trattarli come
parametri. Si introduce un rho per gestire il learning rate, di solito basso
Per la regressione definiamo la quare loss, con learning rate 1 i residui sono il negativo del gradiente,
ci muoviamo nella direzione opposta del gradiente per minimizzare J, fittiamo i nostri residui hk in
base al negativo del gradiente.
Aggiorno Fin base al gradiente significa agggiornare F in base al negativo del gradiente.
So we are actually updating our model using gradient descent! It turns out that the concept of
gradients is more general and useful than the concept of residuals. So from now on, let's stick with
gradients.

Loss Function
Se uso diverse Loss Function avrò diversi comportamenti del gradient boosting, uno svantaggio di
quello che abbiamo visto (detto L2 Loss) gli outlayers hanno una forte importanza visto che la
differenza di Regressione è al quadrato, può essere un problema risolvibile adottando la L1 loss, in
cui al posto di fare il quadrato faccio solo il modulo.

Se devo classificare uso la Log Loss per la binary classification, o la cross entropy loss se ho più classi.
Invece l’adaBoost loss function va bene per la classificazione binaria

In genere col busting usiamo gli alberi perché vogliamo avere dei weak learner(sequenziali) dove il
loro bias è molto alto perché approssimiamo un problema complesso con un albero seplice, ma
combinandoli e ottenendo uno strong learner ottengo un bias basso.
Nelle techniche bagging tipo le random forest abbiamo che gli alberi vengono costuiti fino alla loro
massima estensione per poi combinarli fra loro per ridurre la variance.
Sempre nel boosting il fatto di scegliere il numero di elementi di regressori è un iperparametro
deciso attraverso il k-fold validation per capire quanti elementi, il boosting da luogo all’overfitting.
Avere però troppi alberi potrebbe portare ad overfitting, bisogna fermarsi al punto giusto.

Bagging vs Boosting
Non c’è ne uno sempre migliore dell’altro
• Il bagging è computazionalmente più efficiente poiché può allenare i modelli in parallelo,
mentre il boosting no.
• Entrambi riducono la varianza e l’overfitting combinando diversi modelli.
• Il modello risultante ha una maggiore stabilità rispetto ai modelli che lo compongono presi
singolarmente.
• In generale il bagging non può ridurre il bias, il boosting sì.
• Normalmente il bagging funziona meglio del boosting se si ha poco bias e si vuole ridurre la
varianza. Se invece ho un alto bias è meglio il boosting

XGBoost

Extreme Gradient Boosting è un’ottimizzazione del gradient boosting con le seguenti


caratteristiche:
• Velocità e performance: scritto originariamente in C++, è il più veloce tra i classificatori dei
metodi di insieme.
• Algoritmo parallelizzabile: poiché l’algoritmo di base di XGBoost è parallelizzabile, può
essere sfruttato da computer multi-core e GPU.
• Anche con pochissimi dati ha performance migliori degli altri algoritmi.
• Grande varietà di parametri personalizzabili.

Introduce la cross validation per trovare gli iperparametri.


Blending stacking

C’ diventa un meta classificatore, prima era soltanto un meccanismo di votazione a maggioranza


tutti gli output dei classificatori(base learner) vanno combinate e usate come input dal meta learner,
e processandole produrrà l’output, il problema è addestrare il base learner e poi il meta learner.
se c’è un problema di overfitting su un base learner il nostro metalearner penserà che quello è molto
affidabile, quindi il meta learner non deve essere addestrato sui dati usati dal base learner ma su
altri.
il suo dataset d’ingresso va diviso in 2 parti, D1 per addestrare il base learner, i loro output vanno
all’interno dei meta learner, e D2 va ad addestrare il meta learner, quindi il meta learner va a vedere
come si comportano i base learner con dati mai visti. si puù usare il k fold cross validation

if base learners can output probabilities, use those as input to meta learner instead
Which algorithm to use for meta learner?

al meta learner oltre alle predizioni dei base learner si possono fornire anche l’insieme delle
features, ma queste vanno ad appesantire il tutto, comunque i base learner possono essere qualsiasi
schema, tipo ANN, alberi, SVM ecc..
bisogna stare attenti al non avere overfitting.

fase blanding:
si divide il dataset in 2 parti, la prima per addestrare il base learner e la seconda per il meta learner
fase stacking:
si usa un kross fold validation per addestrare i base model:
Train the L Base-Models: thek-fold cross-validation procedure is performed on each base model of
interest, and all ofthe out-of-fold predictions are collected, gli insiemi non usati verranno usati per
il meta learner
Train the Meta-Model: itis trained on the predictions made by the other models. This meta-model
may or may not also take the input data for each example as input when making predictions.
final estimator è il
meta learner
estimator è il base
learner
cluster Analysis
il problema delle label associate ai dati è
che definirle è complesso, la cluster
analysis cerca di trovare gruppi di
dati(cluster) tali per cui questi elementi in
un gruppo siano simili, e che allo stesso
tempo siano diversi dagli elementi di altri
gruppi.
vogliamo che la intracluster distances sia
minimizzata, mentre la intercluster
massimizzata.
la cluster analisys serve a capire similarità dei dati e riduce la dimensione del dataset

gerarchia dei cluster


in base a come vado a raggruppare trovo delle gerarchie

Types of Clusters
Well-Separated
A cluster is a set of points such that any point in a cluster is
closer (or more similar) to every other point in the cluster
than to any point not in the cluster.

Center-Based
A cluster is a set of objects such that an object
in a cluster is closer (more similar) to the
“center” of a cluster, than to the center of any
other cluster The center of a cluster is often a
centroid, the average of all the points in the
cluster, or a medoid, the most
“representative” point of a cluster

contiguity based
A cluster is a set of points such that a point in a cluster is closer (or more similar) to one or more
other points in the cluster than to any point not in the cluster
density based
A cluster is a dense region of points, which is separated by low-density regions, from other regions
of high density. Used when the clusters are irregular or intertwined, and when noise and outliers
are present.
I punti con bassa densità non definiscono raggruppamenti.

funzione obiettivo
i cluster sono definiti da una funzione obiettivo che viene massimizzata o minimizzata, e vedere
tutte le possibili combinazioni di cluster è un problema NP-HARD
quindi conviene usare tecniche greedy su una funz obb globale che sono soggette però a minimi
locali.
oppure le tecniche gerarchiche che vanno a lavorare su funz obb locali

K-means cluster
•Partitionalclustering approach
•Each cluster is associated with a centroid(center point)
•Each point is assigned to the cluster with the closest centroid
•Number of clusters, K, must be specified(iperparametro)
•The basic algorithm is very simple

A e B sono centroidi scelti a caso, e col passare del tempo questi si


spostano verso i punti che appartengono al loro insieme, con questo
spostamento però alcuni punti del cluster potrebbero cambiare gruppo
visto che diventano più vicini ad un altro centroide.
lo spostamento è verso il punto medio di tutti gli elementi in un dato
gruppo. mentre il medoide è il punto più vicino al centroide.
la distanza usata in genera è la euclidea, ma ne posso usare altre tipo la cos similarity.
la complessità è O(n*K*I*d)
con n numero di punti, K=numero di cluster, I numero di iterazioni, e d= num attributi
la convergenza di solito è veloce e avviene in poche iterazioni

valutazione del K-mean


c’è una funzione costo sum of square error che indica le distanze dai punti x(dati) rispetto
all’elemento più rappresentativo mi(centro), Ci sono i cluster

dati 2 cluster si sceglie quello con SSE minore, e un modo per minimizzare SSE è avere più K num
cluster, A good clustering with smaller K can have a lower SSE than a poor clustering with higher K

scegliere dei punti casualmente non va bene perché potrebbe portarmi a minimi locali, o se ho tanti
K potrei avere dei centri più vicini e quindi più minimi locali, una tecnica è quella del fare più ran e
poi valutare.

come preprocessing posso:


- normalizzare i dati(stessa unità di misura)
- eliminare gli outlayers(elementi che sono molto distanti e possono influenzare molto un
centro di cluster)
per il post processing:

limitazioni
K-means has problems when clusters are of differing
- Sizes
- Densities
- Non-globular shapes
K-means has problems when the data contains outliers.
Basic K-means algorithm can yield empty clusters
- Choose the point that contributes most to SSE
- Choose a point from the cluster with the highest SSE
- If there are several empty clusters, the above can be repeated several times.

One solution is to use many clusters. Find parts of clusters, but need to put together.

coefficiente silhouette
Another approach is to look at
the silhouette score, which is the
mean silhouette coefficient over all
the instances. An instance's silhouette
coefficient is equal
to (b−a)/max(a,b) where a is the
mean distance to the other instances in
the same cluster (it is the mean intra-
cluster distance), and b is the mean
nearest-cluster distance, that is the
mean distance to the instances of the
next closest cluster (defined as the one
that minimizes b, excluding the
instance's own cluster). The silhouette coefficient can vary between -1 and +1: a coefficient close to
+1 means that the instance is well inside its own cluster and far from other clusters, while a
coefficient close to 0 means that it is close to a cluster boundary, and finally a coefficient close to -
1 means that the instance may have been assigned to the wrong cluster.

Bisecting K-means

Variant of K-means that can produce a partitional or a hierarchical clustering, va a gestire il problema
di inizializzazione e genera una gerarchia di cluster,
crea dei cluster che poi andrà a spezzarli in più sottoclassi con delle loro SSE, lo faccio su chi ha un
valore più alto di SSE, di solito è usato come cofigurazione iniziale del K.mean per poi far aprtire il
Kmean
questi algoritmi sono basati su una funzione di ottimizzazione, il DBscan è basato sul concetto di
densità

DBSCAN
tecnica basata sulla densità e ha e punti principali:
Density = number of points within a specified radius (Eps)
A point is a core point if it has more than a specified number of points (MinPts) within Eps These are
points that are at the interior of a cluster

si definiscono anche:
A border point has fewer than MinPts within Eps, but is in the
neighborhood of a core point
A noise point is any point that is not a core point or a border point.
il DB scan prende tutti i punti e li classifica secondo le definizioni sopra. i noise point sono eliminati,
i border point vengono assegnati ad un core point in base alla distanza minima,

fai screen degli step


è resistente al rumore, può gestire cluster di diverse forme e dimensione.

limiti
non va bene se ci sono punti di densità variabile e se ho dati multidimensionali con dimensione alta,
bisogna stare attenti a come assegno gli iperparametri minpoints e eps.
Determining EPS and MinPts
• Idea is that for points in a cluster, their kesimo nearest neighbors are at roughly the same distance
• Noise points have the kesimo nearest neighbor at farther distance
• So, plot sorted distance of every point to its kesimo nearest neighbor
cambiando k possiamo valutare le performance
DNSCAN vs Kmean
si vede che I 2 algoritmi clusterizzano in modo diverso

Clusteriong gerarchico
Produce un insieme di cluster organizzati in modo gerarchico, è rappresentabile con in
dendrogramma

Vantaggi: non specifichiamo a priori il numero di cluster sul quale andiamo a lavorare, posso tagliare
il dendogramma per avere un certo numero di cluster, più salgo la gerarchia meno cluster ho.
Possono fornire le tassonomie visto che tende a raggruppare elementi che hanno features simili
andando ad astrarre sempre più

Ci sono 2 tipi:
agglomerativo: Start with the points as individual clusters At each step, merge the closest pair of
clusters until only one cluster (or k clusters) left
divisive: Start with one, all-inclusive cluster At each step, split a cluster until each cluster contains a
point (or there are k clusters)

per decides cosa divider o agglomerare ci si basa sul concetto di similarità o distanza, in base a
queste matrici o divido o agglomero
Agglomerative Clustering Algorithm

Matrice di sinistra è della distanza, la similarità


è a destra

Serve a passare da una matrice all’altra 1- (Dij - Dmin)/(Dmax-Dmin)


Il merge dei cluster lo si a vedendo la matrice della distanza, se la
distanza è basa si mergia, dopo aver mergiato la dimensione della
matrice diminuisce.

In genere si usa la distanza


euclidea, ma potrei usare la L1
manhattano la Linfinito
esempio costruzione matrice coi
punti
come calcolo le distanze dai cluster mergiati? Ci sono diversi algoritmi di agglomeramento

MIN: scelgo la minima distanza fra i punti dei


cluster
MAX:considero la distanza massima degli
elementi dei 2 cluster
Group average: distanza media fra tutti i
punti
Centroidi: calcolo i centroidi e vedo la
distanza

Negli es mostra i vari passaggi!!!!!!!!!!!!!!!!!!!!!


MIN or Single Link approach
Similarity of two clusters is based on the two most similar (MIN distance) points in the different
clusters
Determined by one pair of points, i.e., by one link in the proximity graph.
È l’approccioin cui uso il min sulle distanze o il max sulla sumilarità, in base a questo concetto
raggruppo i nostri elementi

Vantaggi del min:


riesce a separare bene i cluster con forme non globulari se sono ben separati.
Se invece ho dei cluster che si mischiamo faccio fatica, vedi immagini
È sensibile alla presenza del noise
È sensibile alla presenza di outlayer

MAX or Complete Linkage


Similarity of two clusters is based on the two least similar (most distant) points in the different
clusters
Determined by all pairs of points in the two clusters, vedi immagini
Fa riferimento al fatto di usare la distanza massima per calcolare la distanza merge fra 2 nodi
Vantaggi max:
è meno suscettibile alla presenza di noise e outlayer
slide 93 non funziona bene su cluster molto grandi, tende a funzionare con cluster globulari

rivedi confronto min max

Group Average
Invece di calcolare il min e max che sono molto influenzati dalla posizione dei singoli elementi(tipo
outlayer) si usa la nozione di media fra tutte le coppia di punti e poi divido per il numero di coppie
create,

È meno suscettibile al noise e outlayer, è orientato verso strutture globulari

Ward’s distance
Noi abbiamo i nostri raggruppamenti, definisco i centroidi calcolando la SSE
• Similarity of two clusters is based on the increase in squared error when two clusters are merged
(Ward’s distance)
• Similar to group average if distance between points is distance squared
• Less susceptible to noise and outliers
• Biased towards globular clusters
• Hierarchical analogue of K-means Can be used to initialize K-means

È più veloce del group average, anche se ha proprietà simili, viene usato per inizializzare il K-mean
per definire la struttura, e tagli a cui sono corrisposti i centroidi da iniziare col kmean, se voglio
cambiare i k andrò a tagliare il dendogramma ad un altro livello.

Il problema degli algoritmi gerarchici è che se faccio delle scelte, poi non posso più tornare indietro,
mentre col kmean posso far cambiare ad un elemento la classe di un elemento.

Il comportamento varia in base ai dati, si usa la cluster validity

Complessità spaziale e temporale


• O(N^2 ) space since it uses the proximity matrix. N is the number of points.
• O(N^3 ) time in many cases - There are N steps and at each step the size, N2 , proximity matrix
must be updated and searched
- Complexity can be reduced to O(N2 log(N) ) time for some approaches

Svantaggi
• Once a decision is made to combine two clusters, it cannot be undone (kmean può)
• No objective function is directly minimized (la scelta di cosa raggruppare è locale)
• Different schemes have problems with one or more of the following:
- Sensitivity to noise and outliers
- Difficulty handling different sized clusters and convex shapes
- Breaking large clusters
Cluster validity

Metodo per cercare di capire se un metodo non supervisionato va bene, non abbiamo la label ed è
un problema.
Col kmean se dico voglio n cluster allor ame li troverà anche se non hanno molto senso, questo
metodo serve a valutare se va bene

Se ho le label faccio i cluster su tutti i dati, e su un sottoinsieme di label si comporta bene allora
posso supporre che su tutti gli altri dati per cui non ho la label.

1. Determining the clustering tendency of a set of data, i.e., distinguishing whether non-random
structure actually exists in the data.
2. Comparing the results of a cluster analysis to externally known results, e.g., to externally given
class labels.
3. Evaluating how well the results of a cluster analysis fit the data without reference to external
information. - Use only the data
4. Comparing the results of two different sets of cluster analyses to determine which is better.
5. Determining the ‘correct’ number of clusters

Nel kmean un parametron fondamentale è k, ci servono dei metodi per confrontare le


clusterizzazioni con diversi k e punti iniziali, se so che alcune features sono rumorose allora posso
lavorare su sottoinsiemi
• Most important is selecting the variables on which the clustering is based.
• Inclusion of even one or two irrelevant variables may distort a clustering solution.
• Variables selected should describe the similarity between objects in terms that are relevant to the
marketing research problem.
• Should be selected based on past research, theory, or a consideration of the hypotheses being
tested.

Measures of Cluster Validity


Uso indici esterni label su sottoinsiemi di dati, vedo come funziona il sistema con questo sistema,
posso usare l’entropia…
Misure interne cone la SSE, è una misura interna perchp mi da un’indizazione di quanto il nostro
sistema funziona bene.
Misure relative che ci permettono di confrontare diversi raggruppamenti fra loro
Tipo matrici di prossimità ed incidenza(1 per gli elementi dello stesso cluster, 0 se sono di cluster
dievrsi), se faccio la correlazione fra le 2 posso capire se il cluster è buono.

Order the similarity matrix with respect to cluster labels and inspect visually.

Misure interne
Cluster Cohesion: Measures how closely related are objects in a cluster tipo SSe
Cluster Separation: Measure how distinct or wellseparated a cluster is from other clusters
Squared error:

Misure esterne
Entropia purezza
Gli algoritmi supervsionati richiedono le label può essere dispendioso avere la label per molti dati
dal punto di vista temporale.
Attualmente si sta cercando di avere metodi alternativi nella fase di training, voglio fare data
aumentation senza sapere la classe