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