Estratto del documento

Corso di Laurea Magistrale in Informatica

Appunti di Machine Learning And

Pattern Recognition

Anno Accademico 2025/2026

Studente: Emmanuel Messina

Politecnico Di Torino

Indice

1 Librerie Numeriche in Python 4

1.1 Numpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2 matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2 Machine Learning e Pattern Recognition: Fondamenti e Applicazioni 19

2.1 Introduzione al Machine Learning e al Pattern Recognition . . . . . . . . . . . . . . 19

2.2 Tipologie di Problemi Affrontati nel Machine Learning . . . . . . . . . . . . . . . . . 19

2.3 Tipologie di Apprendimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2.4 Processo di Classificazione dei Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.5 Valutazione della qualità delle predizioni . . . . . . . . . . . . . . . . . . . . . . . . . 26

3 Dimensionality Reduction 29

3.1 Concetti preliminari di algebra lineare . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.2 Principal Component Analysis (PCA) . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.3 Analisi Lineare Discriminante (LDA) . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

4 Introduzione alla Probabilità 57

4.1 Probabilità e Stima della Densità: Concetti Fondamentali . . . . . . . . . . . . . . . 57

4.2 Probabilità Condizionata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

4.3 Variabili Casuali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

4.4 Variabili Casuali Discrete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

4.5 Variabili Casuali Continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

4.6 Vettori Casuali e Distribuzioni Congiunte . . . . . . . . . . . . . . . . . . . . . . . . 68

4.7 Valore Atteso e Varianza delle Variabili Casuali . . . . . . . . . . . . . . . . . . . . . 72

4.8 Distribuzioni Discrete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

4.9 Distribuzioni Continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

4.10 Approccio Frequentista e Approccio Bayesiano . . . . . . . . . . . . . . . . . . . . . 80

4.11 Stima della Densità per Variabili Continue: Il Modello Gaussiano . . . . . . . . . . . 84

5 Generative Gaussian Model 89

5.1 Modelli Gaussiani Generativi: Principi di Classificazione Bayesiana . . . . . . . . . . 89

5.2 Gaussian Classifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

5.3 Classificazione binaria e posterior ratio . . . . . . . . . . . . . . . . . . . . . . . . . . 98

5.4 Classificazione Bayesiana Multiclasse . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

5.5 Classificatore Naive Bayes Gaussiano . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

5.6 Modello Gaussiano con Covarianza Condivisa . . . . . . . . . . . . . . . . . . . . . . 103

5.7 Considerazioni Pratiche e Trasformazione dei Dati . . . . . . . . . . . . . . . . . . . 106

5.8 Analisi delle Prestazioni Multiclasse . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

6 Modelli generativi multinomiali 109

6.1 Modelli Generativi Multinomiali: Modellazione di Valori Discreti . . . . . . . . . . . 109

6.2 Modellazione con più attributi categoriali . . . . . . . . . . . . . . . . . . . . . . . . 114

6.3 Log-Likelihood Ratio nel caso binario (due classi) . . . . . . . . . . . . . . . . . . . . 115

6.4 Considerazioni pratiche: parole rare e smoothing . . . . . . . . . . . . . . . . . . . . 117

1

Emmanuel Messina - Machine Learning and Pattern Recognition 2025/2026

7 Bayes Decisions e Model evaluation 119

7.1 MAP e le sue limitazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

7.2 Bayes Risk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

7.3 Detection Cost Function( DCF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

7.4 Decisione bayesiana ottimale e soglia . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

7.5 Score Calibration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

8 Logistic Regression 143

8.1 Regressione logistica: introduzione e fondamenti . . . . . . . . . . . . . . . . . . . . 143

8.2 Stima tramite massima verosimiglianza . . . . . . . . . . . . . . . . . . . . . . . . . . 145

8.3 Riformulazione della funzione obiettivo con etichette binarie simmetriche . . . . . . . 148

8.4 Calibrazione a priori e regressione logistica pesata . . . . . . . . . . . . . . . . . . . 153

8.5 Estensione multiclass della Logistic Regression . . . . . . . . . . . . . . . . . . . . . 154

8.6 Logistic Regression e confronto con Gaussian Classifier . . . . . . . . . . . . . . . . . 157

9 Support Vector Machine (SVM) 160

9.1 Introduzione alle SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

9.2 Primal SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

9.3 Dual SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

9.4 Condizioni di Ottimalità: le KKT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

9.5 Soft Margin SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

9.6 Il Kernel Trick e le Trasformazioni Non Lineari . . . . . . . . . . . . . . . . . . . . . 178

9.7 Considerazioni sulle SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

10 Gaussian Mixture Models 186

10.1 Introduzione ai Gaussian Mixture Models (GMM) . . . . . . . . . . . . . . . . . . . 186

10.2 Approssimazione tramite Hard Assignment . . . . . . . . . . . . . . . . . . . . . . . 188

10.3 Approssimazione tramite Soft Assignment . . . . . . . . . . . . . . . . . . . . . . . . 193

10.4 GMM per la Classificazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

10.5 L’Algoritmo LBG (Linde-Buzo-Gray) . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

10.6 Selezione del Modello (Model Selection) . . . . . . . . . . . . . . . . . . . . . . . . . 208

11 Score Calibration 210

11.1 Misscalibrazione dei punteggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

11.2 Modelli Generativi per la Calibrazione dei Punteggi . . . . . . . . . . . . . . . . . . 212

11.3 Architettura e Partizione dei Dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

11.4 K-fold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

11.5 Point Fusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

11.6 Calibrazione e Fusione per Problemi Multiclasse . . . . . . . . . . . . . . . . . . . . 221

Prima di iniziare a studiare da questi appunti è necessario che tu sappia che, nonos-

Premessa

tante si sia cercato di fare gli appunti nel miglior modo possibile sia per ripassare al meglio e

sia per poter creare un materiale utile per altri studenti, che ci potrebbero ugualmente essere

imprecisioni, errori di scrittura o altro. In caso di problemi si prega di contattarmi via mail:

s333951@studenti.polito.it, su instagram: oppure sul canale telegram:

@emmanuelmessina00

Se vuoi sostenere il lavoro svolto, puoi offrirmi un caffè (1 euro) qui:

CLICCA QUI. CLICCA

QUI. 2

Emmanuel Messina - Machine Learning and Pattern Recognition 2025/2026

Ti lascio anche il profilo github in modo che ti possa confrontare con il codice: CLICCA QUI

3

Emmanuel Messina - Machine Learning and Pattern Recognition 2025/2026

1 Librerie Numeriche in Python

Le librerie numeriche sono NumPy e SciPy. Queste due librerie ci abilitano l’utilizzo di array multi-

dimensionali (servono ad esempio per la classificazione di immagini), algebra lineare, ottimizzazione

numerica e molti algoritmi di Machine Learning. Iniziamo con Numpy.

1.1 Numpy

è una libreria Python utilizzata per lavorare con gli array. Ha anche funzioni per lavorare

NumPy

nel dominio dell’algebra lineare, trasformata di Fourier e matrici. NumPy è stato creato nel 2005

da Travis Oliphant. È un progetto open source e puoi usarlo liberamente. NumPy è l’acronimo

di Numerical Python. In Python abbiamo liste che servono allo scopo di array, ma sono lente da

elaborare. NumPy mira a fornire un oggetto array che è fino a 50 volte più veloce di liste Python

tradizionali. L’oggetto array in NumPy si chiama ndarray e fornisce molte funzioni di supporto

che rendono il lavoro molto semplice. La maggior parte delle parti che richiedono un calcolo veloce

sono scritte in C o C++.

Gli oggetti principali di questa libreria sono array multidimensionali (di classe:

ndarray ndar-

Gli array sono spesso usati per collezioni monodimensionali. Con numpy.array rappresentiamo

ray).

gli array. Le dimensioni sono chiamate assi. Un array monodimensionale ha un asse, bidimensionale

ne ha due e così via. Non confondere il vettore bidimensionale con la classe matrix.

>>> numpy . array ([1 ,2 ,3])

1 array ([1 ,2 ,3])

2 >>> numpy . array ([[1 ,2 ,3] , [4 ,5 ,6]])

3 array ([[1 , 2 , 3] ,

4 [4 , 5 , 6]])

5 Gli Arrays hanno attributi che descrivono le caratteristiche:

• ritorna la dimensione dell’array

ndarray.size:

• ritorna una tupla con le dimensioni dell’array, se la matrice è m x n avremo

ndarray.shape:

una tupla (m,n)

• ritorna il numero degli assi

ndarray.ndim:

• ritorna il tipo di dati

ndarray.dtype:

>>> x = numpy . array ([1 ,2 ,3])

1 >>> x . size

2 3

3 >>> x . shape

4 (3 ,)

5 >>> y = numpy . array ([[1 ,2 ,3] , [4 ,5 ,6]])

6 >>> y . shape

7 (2 , 3)

8 >>> y . size

9 6

10 >>> y . ndim

11 2

12 4

Emmanuel Messina - Machine Learning and Pattern Recognition 2025/2026

Per creare un array ci sono vari modi:

Creazione array

Da una lista o tupla python possiamo dare in pasto a numpy.array per creare un array.

.array

Possiamo forzare il tipo mettendo come parametri oltre alla lista dtype=numpy.tipochevogliamo.

>>> numpy . array ([1 ,2 ,3] , dtype = numpy . float64 )

1 array ([ 1. , 2. , 3.])

2 Possiamo passare un array ad un altro array per copiarlo.

>>> y = numpy . array ( x )

1 Si possono usare funzioni per creare array predefiniti:

zero, ones, arrange, eye, linspace

• crea un array di soli 0

zeros:

• crea un array di soli 1

ones:

• crea un array di una sequenza ordinata di elementi che iniziano da 0 al numero

arrange:

passato nei parametri. Si può anche mettere un range diverso con la dimensione di quanto

distano gli elementi tra loro, senza è automaticamente 1, andando ad inserire 3 parametri,

punto di inizio, punto di fine, distanza .

• crea un array pluri-dimensionale che simula una matrice identità.

eye:

• dati tre parametri, punto di inizio, punto di fine, numero di punti, crea un array

linspace:

di elementi distanti in modo omogeneo in base al terzo parametro tra il punto di inizio e il

punto di fine.

>>> numpy . zeros ((2 , 3) , dtype = numpy . float32 )

1 array ([[ 0. , 0. , 0.] ,

2 [ 0. , 0. , 0.]] , dtype = float32 )

3 >>> numpy . ones (5)

4 array ([ 1. , 1. , 1. , 1. , 1.])

5 >>> numpy . arange (4)

6 array ([0 , 1 , 2 , 3])

7 >>> numpy . eye (3)

8 array ([[ 1. , 0. , 0.] ,

9 [ 0. , 1. , 0.] ,

10 [ 0. , 0. , 1.]])

11 È possibile accedere a un elemento della matrice facendo

Accesso agli elementi dell’array

riferimento al relativo numero di indice. Gli indici negli array NumPy iniziano con 0, il che significa

che il primo elemento ha indice 0 e il secondo ha indice 1 ecc.

arr = numpy . array ([1 , 2 , 3 , 4])

1 print ( arr [0])

2 Per accedere agli elementi da array 2D possiamo utilizzare numeri interi separati da virgole che

rappresentano Le dimensione e l’indice dell’elemento.

5

Emmanuel Messina - Machine Learning and Pattern Recognition 2025/2026

import numpy as np

1

2 arr = np . array ([[1 ,2 ,3 ,4 ,5] , [6 ,7 ,8 ,9 ,10]])

3

4 print ( ’2 nd element on 1 st row : ’ , arr [0 , 1])

5 print ( ’5 th element on 2 nd row : ’ , arr [1 , 4])

6 Per accedere agli elementi da array 3D possiamo utilizzare interi separati da virgole che rappresen-

tano le dimensioni e l’indice dell’elemento.

import numpy as np

1

2 arr = np . array ([[[1 , 2 , 3] , [4 , 5 , 6]] , [[7 , 8 , 9] , [10 , 11 , 12]]])

3

4 print ( arr [0 , 1 , 2])

5 Possiamo combinare gli arrays con operazioni aritmetiche. Dati due

Operazioni tra array

array possiamo sommarli tra loro o moltiplicarli ad esempio (Nota bene, è diverso dal concetto di

moltiplicazione tra matrici). La stessa cosa vale per sottrazione o divisione. Per modificare un

array esistente possiamo usare gli operatori *=, += ecc.

>>> x = numpy . array ([[1 ,2 ,3] , [4 ,5 ,6]])

1 >>> y = numpy . array ([[2 ,2 ,2] , [3 ,3 ,3]])

2 >>> x + y

3 array ([[3 , 4 , 5] ,

4 [7 , 8 , 9]])

5 >>> x * y

6 array ([[ 2 , 4 , 6] ,

7 [12 , 15 , 18]])

8 Il prodotto tra matrici come lo intendiamo matematicamente può essere fatto attraverso la funzione

Ricordare che il numero di colonne della prima matrice deve essere uguale al numero di righe

dot.

della seconda matrice.

>>> x = numpy . array ([[1 ,2] , [3 ,4] , [5 ,6]])

1 >>> y = numpy . array ([[1 ,2 ,3] , [4 ,5 ,6]])

2 >>> numpy . dot (x , y )

3 array ([[ 9 , 12 , 15] ,

4 [19 , 26 , 33] ,

5 [29 , 40 , 51]])

6 La funzione è un metodo che consente di cambiare la forma di un array esistente in

reshape

una nuova forma specificata. La nuova forma deve avere lo stesso numero totale di elementi del-

l’array originale, poiché i dati dell’array rimangono invariati. È possibile trasformare un array

monodimensionale in un array bidimensionale o tridimensionale.

>>> x = numpy . array ([[1 ,2] , [3 ,4] , [5 ,6]])

1 >>> x

2 array ([[1 , 2] ,

3 [3 , 4] ,

4 [5 , 6]])

5 >>> y = x . reshape ((2 ,3) )

6 >>> y

7 array ([[1 , 2 , 3] ,

8 [4 , 5 , 6]])

9 Possiamo utilizzare per creare vettori di riga e colonna

reshape 6

Emmanuel Messina - Machine Learning and Pattern Recognition 2025/2026

>>> x = numpy . arange (3)

1 >>> x

2 array ([0 , 1 , 2])

3 >>> x . reshape ((1 , x . size ) )

4 array ([[0 , 1 , 2]])

5 >>> x . reshape (( x . size , 1) )

6 array ([[0] ,

7 [1] ,

8 [2]])

9 Il metodo fa un reshape su un array multidimensionale trasformandolo in uno monodimen-

ravel

sionale.

>>> x = numpy . arange (12) . reshape ((2 ,2 ,3) )

1 >>> x

2 array ([[[ 0 , 1 , 2] ,

3 [ 3 , 4 , 5]] ,

4 [[ 6 , 7 , 8] ,

5 [ 9 , 10 , 11]]])

6 >>> x . ravel ()

7 array ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,

8 10 , 11])

9 Nello studio delle librerie numeriche e nella ma-

Dimensionalità e organizzazione dei dati

nipolazione dei dati, è fondamentale distinguere accuratamente le diverse dimensionalità degli array.

Un errore comune consiste nel confondere gli array monodimensionali, caratterizzati da una forma

o shape pari a (n, ), con i vettori riga veri e propri, che possiedono invece una struttura bidimen-

sionale con shape pari a (1, In NumPy, un array monodimensionale rappresenta una semplice

n).

sequenza di valori senza un orientamento geometrico rigoroso, motivo per cui è essenziale definire

esplicitamente la dimensionalità quando si eseguono operazioni di algebra lineare.

Per quanto concerne l’organizzazione strutturale dei dataset, l’approccio matematico classico prevede

la rappresentazione dei singoli dati sotto forma di vettori colonna. Seguendo questa logica, le matri-

ci complessive vengono costruite attraverso l’affiancamento, ovvero lo stacking orizzontale, di questi

vettori colonna continui. È molto importante tenere presente che questa metodologia differisce dalla

convenzione opposta, largamente adottata in svariate librerie di Machine Learning, dove i singoli

punti dati sono invece rappresentati come vettori riga e le matrici si ottengono impilandoli verti-

calmente uno sull’altro.

L’utilizzo dei vettori colonna offre il grande vantaggio di mantenere una corrispondenza naturale e

diretta con la notazione matematica standard. Ad esempio, la classica operazione di trasformazione

lineare viene scritta e implementata fedelmente come = Tuttavia, questa scelta architetturale

y Ax.

può comportare un lieve calo delle prestazioni computazionali. Le operazioni risultano infatti leg-

germente più lente a causa dell’accesso in memoria, a meno che non si forzi esplicitamente un

ordinamento in stile Fortran, noto anche come column-major ordering.

Al contrario, l’impiego dei vettori riga garantisce che gli elementi appartenenti a un singolo dato

siano disposti in posizioni di memoria rigorosamente consecutive, seguendo l’ordinamento predefini-

to del linguaggio C, ovvero il row-major ordering. Questa contiguità spaziale permette alla CPU

di eseguire diverse operazioni matriciali in modo leggermente più veloce ed efficiente. Un ulteriore

7

Emmanuel Messina - Machine Learning and Pattern Recognition 2025/2026

aspetto pratico a favore della struttura a righe riguarda l’iterazione del codice: una matrice di

dati formattata in questo modo può essere scorsa e analizzata agevolmente utilizzando un semplice

ciclo for. Bisogna in ogni caso prestare attenzione al comportamento interno della libreria, poiché

durante questa iterazione gli elementi estratti e restituiti da NumPy saranno a tutti gli effetti degli

array monodimensionali, e non manterranno la forma originaria di vettori riga bidimensionali.

Per comprendere a fondo la differenza pratica tra queste rappresentazioni, è utile analizzare di-

rettamente il comportamento degli array in memoria attraverso degli

Anteprima
Vedrai una selezione di 10 pagine su 223
Machine Learning and pattern recognition - Appunti completi (PCA, LDA, modelli gaussiani, SVM, GMM) Pag. 1 Machine Learning and pattern recognition - Appunti completi (PCA, LDA, modelli gaussiani, SVM, GMM) Pag. 2
Anteprima di 10 pagg. su 223.
Scarica il documento per vederlo tutto.
Machine Learning and pattern recognition - Appunti completi (PCA, LDA, modelli gaussiani, SVM, GMM) Pag. 6
Anteprima di 10 pagg. su 223.
Scarica il documento per vederlo tutto.
Machine Learning and pattern recognition - Appunti completi (PCA, LDA, modelli gaussiani, SVM, GMM) Pag. 11
Anteprima di 10 pagg. su 223.
Scarica il documento per vederlo tutto.
Machine Learning and pattern recognition - Appunti completi (PCA, LDA, modelli gaussiani, SVM, GMM) Pag. 16
Anteprima di 10 pagg. su 223.
Scarica il documento per vederlo tutto.
Machine Learning and pattern recognition - Appunti completi (PCA, LDA, modelli gaussiani, SVM, GMM) Pag. 21
Anteprima di 10 pagg. su 223.
Scarica il documento per vederlo tutto.
Machine Learning and pattern recognition - Appunti completi (PCA, LDA, modelli gaussiani, SVM, GMM) Pag. 26
Anteprima di 10 pagg. su 223.
Scarica il documento per vederlo tutto.
Machine Learning and pattern recognition - Appunti completi (PCA, LDA, modelli gaussiani, SVM, GMM) Pag. 31
Anteprima di 10 pagg. su 223.
Scarica il documento per vederlo tutto.
Machine Learning and pattern recognition - Appunti completi (PCA, LDA, modelli gaussiani, SVM, GMM) Pag. 36
Anteprima di 10 pagg. su 223.
Scarica il documento per vederlo tutto.
Machine Learning and pattern recognition - Appunti completi (PCA, LDA, modelli gaussiani, SVM, GMM) Pag. 41
1 su 223
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-IND/14 Progettazione meccanica e costruzione di macchine

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher emmanuelmessina00 di informazioni apprese con la frequenza delle lezioni di Machine learning and pattern recognition e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Torino o del prof Baralis Elena.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community