Middle
O que é o algoritmo k-vizinhos mais próximos (kNN)?
sobes.tech IA
Resposta da IA
O algoritmo dos k-vizinhos mais próximos (kNN) é um algoritmo simples e não paramétrico de aprendizagem de máquina, utilizado tanto para classificação quanto para regressão.
Essência: Atribui um novo objeto (ponto de dados) à classe mais representada entre os k vizinhos mais próximos no conjunto de treino. Para regressão, prevê um valor como a média/mediana dos valores dos k vizinhos mais próximos.
Principais passos para classificação:
- Escolher K: Determinar o número de vizinhos mais próximos (K).
- Calcular a distância: Calcular a distância entre o novo objeto e cada objeto no conjunto de treino (por exemplo, distância euclidiana).
- Encontrar K vizinhos mais próximos: Ordenar os objetos por distância e selecionar os K mais próximos.
- Votação: Determinar a classe do novo objeto com base na maioria dos votos entre os K vizinhos mais próximos.
Vantagens:
- Facilidade de implementação e compreensão.
- Não requer treino de modelo (algoritmo preguiçoso).
- Adapta-se a novos dados à medida que eles aparecem.
Desvantagens:
- Custoso computacionalmente com grandes volumes de dados (fase de previsão).
- A escolha de K e a métrica de distância são críticas.
- Sensível à escala das características e à "maldição da dimensionalidade".
- Não funciona bem diretamente com características categóricas (requer codificação).
Aplicações:
- Reconhecimento de padrões.
- Sistemas de recomendação.
- Diagnóstico médico.
- Busca de documentos similares.
# Exemplo de implementação de kNN para classificação usando scikit-learn
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
# Criação de dados de demonstração
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y = np.array([0, 0, 1, 1, 0, 1]) # Rótulos de classes
# Divisão de dados em conjunto de treino e teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Criação e treino do modelo kNN
# K=3, ou seja, 3 vizinhos mais próximos
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# Previsão no conjunto de teste
y_pred = knn.predict(X_test)
# Avaliação da precisão
accuracy = accuracy_score(y_test, y_pred)
# print(f"Precisão do modelo: {accuracy}")
# Previsão para um novo ponto
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Classe prevista para o novo ponto: {predicted_class[0]}")