O algoritmo k-nearest neighbors (KNN), ou k vizinhos mais próximos, é um classificador de aprendizado supervisionado não paramétrico, que usa a proximidade para fazer classificações ou previsões sobre o agrupamento de um determinado ponto de dados. É um dos classificadores mais populares e simples usados em aprendizado de máquina atualmente.
Embora o algoritmo KNN possa ser usado para problemas de regressão ou classificação, ele é tipicamente utilizado como um algoritmo de classificação, partindo do pressuposto de que pontos semelhantes podem ser encontrados próximos uns dos outros.
Para os problemas de classificação, um rótulo de classe é atribuído com base em uma votação majoritária. Ou seja, o rótulo mais frequentemente representado em torno de um dado ponto de dados é utilizado. Embora isso seja tecnicamente considerado uma "votação por pluralidade", o termo "voto majoritário" é mais amplamente usado na literatura. A distinção entre esses termos é que "votação majoritária" tecnicamente requer uma maioria de mais de 50%, o que funciona principalmente quando há apenas duas categorias. Quando se tem várias classes, por exemplo, quatro categorias, você não precisa necessariamente de 50% dos votos para fazer uma conclusão sobre uma classe; você poderia atribuir um rótulo de classe com mais de 25% de votos. A Universidade de Wisconsin-Madison resume isso bem com este exemplo.
Problemas de regressão usam um conceito semelhante ao problema de classificação, mas nesse caso, a média dos k vizinhos mais próximos é usada para fazer uma previsão sobre uma classificação. A principal distinção aqui é que a classificação é usada para valores discretos, enquanto a regressão é usada com valores contínuos. No entanto, antes que uma classificação possa ser feita, a distância precisa ser definida. A distância euclidiana é a mais comumente utilizada, sobre a qual vamos nos aprofundar mais abaixo.
Também vale observar que o algoritmo KNN faz parte de uma família de modelos de "aprendizado preguiçoso", o que significa que ele apenas armazena um conjunto de dados de treinamento, em vez de passar por uma fase de treinamento. Isso também significa que toda a computação ocorre quando uma classificação ou previsão está sendo feita. Como ele depende bastante da memória para armazenar todos os seus dados de treinamento, também é chamado de método de aprendizado baseado em instância ou em memória.
Evelyn Fix e Joseph Hodges são creditados com as ideias iniciais em torno do modelo KNN neste artigo de 1951, enquanto Thomas Cover expande o conceito em sua pesquisa "Nearest Neighbor Pattern Classification." Embora não seja tão popular quanto já foi, ainda é um dos primeiros algoritmos que se aprende em ciência de dados devido à sua simplicidade e precisão. No entanto, à medida que um conjunto de dados cresce, o KNN se torna cada vez mais ineficiente, comprometendo o desempenho geral do modelo. É comumente utilizado para sistemas de recomendação simples, reconhecimento de padrões, mineração de dados, previsões de mercados financeiros, detecção de intrusões e muito mais.
Recapitulando, o objetivo do algoritmo k-nearest neighbors (KNN) é identificar os vizinhos mais próximos de um determinado ponto de consulta, para que possamos atribuir uma classe a esse ponto. Para fazer isso, o KNN tem alguns requisitos:
Para determinar quais pontos de dados estão mais próximos de um determinado ponto de consulta, é necessário calcular a distância entre o ponto de consulta e os outros pontos de dados. Essas métricas de distância ajudam a formar limites de decisão, que particionam os pontos de consulta em diferentes regiões. É comum visualizar esses limites de decisão com diagramas de Voronoi.
Embora existam várias medidas de distância que você pode escolher, este artigo abordará apenas as seguintes:
Distância Euclidiana (p=2): esta é a medida de distância mais comumente utilizada, sendo limitada a vetores com valores reais. Usando a fórmula abaixo, ela mede uma linha reta entre o ponto de consulta e o outro ponto sendo medido.
Distância de Manhattan (p=1): esta é outra métrica de distância popular, que mede o valor absoluto entre dois pontos. Também é chamada de distância de táxi ou distância de quarteirão, pois geralmente é visualizada com uma grade, ilustrando como alguém poderia navegar de um endereço a outro pelas ruas da cidade.
Distância de Minkowski: esta métrica de distância é a forma generalizada das métricas de distância euclidiana e de Manhattan. O parâmetro p, na fórmula abaixo, permite a criação de outras métricas de distância. A distância Euclidiana é representada por esta fórmula quando p é igual a dois, e a distância de Manhattan é denotada com p igual a um.
Distância de Hamming: esta técnica é normalmente usada com vetores booleanos ou de strings, identificando os pontos onde os vetores não correspondem. Como resultado, também é conhecida como métrica de sobreposição. Isso pode ser representado com a seguinte fórmula:
Por exemplo, se você tiver as seguintes strings, a distância de Hamming seria 2, já que apenas dois dos valores são diferentes.
O valor de k no algoritmo k-NN define quantos vizinhos serão verificados para determinar a classificação de um ponto de consulta específico. Por exemplo, se k=1, a instância será atribuída à mesma classe que seu vizinho mais próximo.
Definir k pode ser um ato de equilíbrio, pois diferentes valores podem levar a overfitting ou underfitting. Valores mais baixos de k podem ter alta variância, mas baixa tendência, e valores maiores de k podem levar a alta tendência e menor variância. A escolha de k dependerá amplamente dos dados de input, já que dados com mais outliers ou ruído provavelmente terão melhor desempenho com valores mais altos de k. No geral, recomenda-se um número ímpar para k, a fim de evitar empates na classificação, e táticas de validação cruzada podem ajudar a escolher o k ideal para seu conjunto de dados.
Para se aprofundar, você pode aprender mais sobre o algoritmo k-NN usando Python e scikit-learn (também conhecido como sklearn). Nosso tutorial no Watson Studio ajuda você a aprender a sintaxe básica desta biblioteca, que também contém outras bibliotecas populares, como NumPy, pandas e Matplotlib. O código a seguir é um exemplo de como criar e prever com um modelo KNN:
O algoritmo k-NN tem sido utilizado em uma variedade de aplicações, principalmente dentro da classificação. Alguns desses casos de uso incluem:
Assim como qualquer algoritmo de aprendizado de máquina, o k-NN tem seus pontos fortes e fracos. Dependendo do projeto e da aplicação, ele pode ou não ser a escolha certa.
O IBM® Granite é nossa família de modelos de IA abertos, de alto desempenho e confiáveis, personalizados para a empresa e otimizados para escalar suas aplicações de IA. Explore as opções de linguagem, código, séries temporais e proteções.
Entrevistamos duas mil organizações a respeito de suas iniciativas de IA para descobrir o que está funcionando, o que não está e como se preparar.
Explore abordagens de aprendizado supervisionado, como máquinas de vetores de suporte e classificadores probabilísticos.
Aprenda conceitos fundamentais e desenvolva suas habilidades com laboratórios práticos, cursos, projetos guiados, avaliações e muito mais.
Treine, valide, ajuste e implemente recursos de IA generativa, modelos de base e recursos de aprendizado de máquina com o IBM watsonx.ai, um estúdio empresarial de última geração para construtores de IA. Crie aplicações de IA em uma fração do tempo com uma fração dos dados.
Use a IA a serviço de sua empresa com a experiência e o portfólio de soluções líder do setor da IBM à sua disposição.
Reinvente os fluxos de trabalho e operações críticos adicionando IA para maximizar experiências, tomadas de decisão em tempo real e valor de negócios.
IBM web domains
ibm.com, ibm.org, ibm-zcouncil.com, insights-on-business.com, jazz.net, mobilebusinessinsights.com, promontory.com, proveit.com, ptech.org, s81c.com, securityintelligence.com, skillsbuild.org, softlayer.com, storagecommunity.org, think-exchange.com, thoughtsoncloud.com, alphaevents.webcasts.com, ibm-cloud.github.io, ibmbigdatahub.com, bluemix.net, mybluemix.net, ibm.net, ibmcloud.com, galasa.dev, blueworkslive.com, swiss-quantum.ch, blueworkslive.com, cloudant.com, ibm.ie, ibm.fr, ibm.com.br, ibm.co, ibm.ca, community.watsonanalytics.com, datapower.com, skills.yourlearning.ibm.com, bluewolf.com, carbondesignsystem.com