Introducció

L'algoritme dels K-Veïns més propers (K-Nearest Neighbors, K-NN) és un dels algoritmes més senzills i intuïtius en el camp del Machine Learning. És un mètode de classificació supervisat que es basa en la idea que els objectes similars es troben a prop l'un de l'altre.

Conceptes Clau

  • K: El nombre de veïns més propers que es consideren per fer la classificació.
  • Distància: La mesura de similitud entre els punts de dades. Les distàncies més comunes són la distància euclidiana, la distància Manhattan i la distància de Minkowski.
  • Classificació: Assignació d'una etiqueta a un punt de dades basant-se en les etiquetes dels seus veïns més propers.

Funcionament de l'Algoritme

  1. Selecció del valor de K: Determinar el nombre de veïns més propers (K) que es consideraran.
  2. Càlcul de la distància: Mesurar la distància entre el punt de dades a classificar i tots els punts de dades del conjunt d'entrenament.
  3. Selecció dels K veïns més propers: Identificar els K punts de dades més propers al punt de dades a classificar.
  4. Classificació: Assignar l'etiqueta més comuna entre els K veïns més propers al punt de dades a classificar.

Exemple Pràctic

Pas 1: Importar les Llibreries Necessàries

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, confusion_matrix

Pas 2: Carregar el Conjunt de Dades

# Suposem que tenim un conjunt de dades en un fitxer CSV
data = pd.read_csv('data.csv')

# Separar les característiques (features) i les etiquetes (labels)
X = data.drop('label', axis=1)
y = data['label']

Pas 3: Dividir el Conjunt de Dades en Entrenament i Test

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Pas 4: Normalitzar les Dades

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

Pas 5: Entrenar el Model K-NN

# Seleccionar el valor de K
k = 5
knn = KNeighborsClassifier(n_neighbors=k)

# Entrenar el model
knn.fit(X_train, y_train)

Pas 6: Fer Prediccions

y_pred = knn.predict(X_test)

Pas 7: Avaluar el Model

accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)

print(f'Accuracy: {accuracy}')
print('Confusion Matrix:')
print(conf_matrix)

Exercici Pràctic

Enunciat

Utilitza el conjunt de dades Iris per entrenar un model K-NN que classifiqui les flors en tres categories: setosa, versicolor i virginica. Segueix els passos descrits anteriorment per carregar les dades, dividir-les en entrenament i test, normalitzar-les, entrenar el model i avaluar-lo.

Solució

from sklearn.datasets import load_iris

# Carregar el conjunt de dades Iris
iris = load_iris()
X = iris.data
y = iris.target

# Dividir el conjunt de dades en entrenament i test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Normalitzar les dades
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# Entrenar el model K-NN
k = 3
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)

# Fer prediccions
y_pred = knn.predict(X_test)

# Avaluar el model
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)

print(f'Accuracy: {accuracy}')
print('Confusion Matrix:')
print(conf_matrix)

Errors Comuns i Consells

  • Selecció del valor de K: Un valor de K massa petit pot fer que el model sigui sensible al soroll, mentre que un valor de K massa gran pot diluir la influència dels veïns més propers. Prova diferents valors de K i utilitza la validació creuada per trobar el valor òptim.
  • Normalització de les dades: És crucial normalitzar les dades abans d'aplicar K-NN, ja que les distàncies poden estar distorsionades si les característiques tenen escales diferents.
  • Sobreesforç computacional: K-NN pot ser computacionalment costós per a conjunts de dades grans, ja que requereix calcular la distància entre el punt de dades a classificar i tots els punts del conjunt d'entrenament.

Conclusió

L'algoritme K-NN és una eina poderosa i fàcil d'entendre per a la classificació. Tot i la seva simplicitat, pot ser molt efectiu en molts escenaris. No obstant això, és important tenir en compte els seus desavantatges, com la sensibilitat al valor de K i la necessitat de normalitzar les dades. Amb una implementació i ajust adequats, K-NN pot proporcionar resultats excel·lents en tasques de classificació.

Curs de Machine Learning

Mòdul 1: Introducció al Machine Learning

Mòdul 2: Fonaments d'Estadística i Probabilitat

Mòdul 3: Preprocessament de Dades

Mòdul 4: Algoritmes de Machine Learning Supervisat

Mòdul 5: Algoritmes de Machine Learning No Supervisat

Mòdul 6: Avaluació i Validació de Models

Mòdul 7: Tècniques Avançades i Optimització

Mòdul 8: Implementació i Desplegament de Models

Mòdul 9: Projectes Pràctics

Mòdul 10: Recursos Addicionals

© Copyright 2024. Tots els drets reservats