master-degree-notes/Foundation of data science/notes/9 K-Nearest Neighbors.md

38 lines
No EOL
2.2 KiB
Markdown

Algoritmo che può essere usato sia per regression che per classification.
#### Classificazione
ho dei dati di training in un determinato spazio vettoriale in base al numero di feature.
Quando voglio classificare un nuovo dato, vedo quali sono i k data point più vicini al dato che voglio classificare sulla base della distanza (tipicamente distanza euclidea).
Poi ordino questi k data point (anche detti i k nearest neighbors, ovvero i primi k vicini), e osservo le classi di questi k. Al nuovo data point darò semplicemente la classe maggioritaria che ho osservato tra i neighbors.
![[Pasted image 20241208150705.png|300]]
Come scelgo il valore migliore per k? Con la Cross Validation (Grid-Search):
- **k piccolo:** poco bias ma tanta varianza: overfitting
![[Pasted image 20241208143835.png|100]]
- **k grande:** poca varianza ma bias alto: underfitting
![[Pasted image 20241208143917.png|100]]
- **un buon k** è un trade-off tra i due
![[Pasted image 20241208144009.png|100]]
#### Regression
Invece di vedere la classe di maggioranza (anche perché in regression non ci sono le classi), calcolo il valore medio dei neighbors, semplicemente sommo tutti i data point e divido per k.
#### Metriche per la distanza
Si possono usare varie metriche
##### Distanza euclidea
La classica distanza cartesiana, la linea che unisce due punti su un piano.
$$d(x,y) = \sum_{j=1}^d \sqrt{(x_j - y_{j})^2}$$
##### Distanza di Manhattan
Misura la somma delle differenze assolute tra le coordinate. Più robusta ai dati con outlier rispetto alla distanza euclidea. Tendenzialmente alla distanza euclidea se la dimensionalità è alta
$$d(x,y) = \sum_{i=1}^n |x_i - y_i|$$
##### Distanza di Minkowski
La possiamo vedere come una forma più "generale", se vario il parametro $p$
- per $p=1$ ho la distanza di Manhattan
- per $p=2$ ho la distanza euclidea
$$d(x,y) = \left( \sum_{i=1}^n |x_i - y_i|^p \right)^{\frac{1}{p}}$$
##### Cosine similarity
Quando ci interessa l'angolo tra i vettori più che la distanza, è il coseno dell'angolo tra due vettori. Si usa spesso con vettori di embedding.
Si possono usare tante altre metriche, io ho riportato le più comuni, per approfondire: https://scikit-learn.org/stable/modules/generated/sklearn.metrics.DistanceMetric.html