{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Algoritmo KNN\n", "### Breve introdução ao algoritmo KNN para classificação." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O algoritmo KNN (**K Nearest Neighbor**) é um dos algoritmos mais simples para se utilizar na área de inteligência artificial. O mais interessante desse algoritmo é a possibilidade dele ser aplicado em dois métodos distintos:\n", "\n", "> - Classificação;\n", "> - Regressão;\n", "\n", "Na classificação, o modelo irá classificar em qual grupo um determinado elemento faz parte. Enquanto isso, na regressão temos uma predição de um valor númerico para um elemento, baseada em determinadas informações sobre a mesma." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A principal ferramenta que utilizamos em sua construção é o **Cálculo de Distâncias Euclidiano**, uma fórmula bastante conhecida entre as pessoas que já tiveram contato com procedimentos matemáticos." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Cálculo da Distância Euclidiana (DE):\n", "> $DE(x,y)=\\sqrt[2]{\\sum_{i}^{p}(x_{1}-y_{1})^{2}}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> Quanto maior for o resultado da Distância Euclidiana, mais distante dois pontos estão entre sí, e quanto menor for o resultado da Distância Euclidiana, menos distantes dois pontos estão entre sí." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mas como isso se aplica na prática?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Exemplo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "|**Filmes**|**Violência**|**Romance**|**Ação**|**Comédia**|\n", "|:---------|:------------|:----------|:-------|-----------|\n", "|Invocação do Mal|0.6|0.0|0.3|0.0|\n", "|Floresta Maldita|0.9|0.0|0.5|0.1|\n", "|Meu Passado me Condena|0.1|0.2|0.1|0.9|\n", "|Vizinhos 2|0.0|0.1|0.2|0.8|\n", "|Deadpool|0.5|0.0|0.7|0.1|\n", "|Tirando o Atraso|0.0|0.2|0.2|0.8|" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Temos 5 filmes acima com uma distribução de porcentagens que qualificam os gêneros abordados no enredo de cada um deles. Perceba que foi criado um dataset para construção de filmes que pode ser usado em um sistema de recomedações, assim como o usado na Netflix." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se um determinado filme assistido possui também uma determinada recomendação em cada categoria, caso fosse realizando a soma da distância euclidiana entre pares de filmes, teriamos para resultados muito grandes filmes com pouca semelhança e para resultados aproximados filmes bastante semelhantes. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos ver quão próximo o filme Invocação do Mal é dos filmes Floresta Maldita e Tirando o Atraso:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$DE(Invocação do Mal, Floresta Maldita)=\\sqrt[2]{(0.6 -0.9)^{2} + (0.0-0.0)^{2} +(0.3 - 0.5) + (0.0 - 0.1)} = 0.37$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$DE(Invocação do Mal, Tirando o Atraso)=\\sqrt[2]{(0.6 -0.0)^{2} + (0.0-0.2)^{2} +(0.3 - 0.2) + (0.0 - 0.8)} = 1.02$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "É perceptível que os Filmes Invocação do Mal e Floresta Maldita são bem semelhantes pela distância euclidiana se comparados com o resultado da distância euclidiana de Invocação do Mal com Tirando o Atraso. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "E de mesmo modo é feito com todos os filmes presentes. Além disso, quanto mais rico de informações for o dataset e, esse possuir um alto grau de confiança, melhor é o sistema de classificação de filmes que uma empresa poderia implementar em seus serviços." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Alguma dúvida? Entre em contato comigo:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [Me envie um e-mail](mailto:alysson.barbosa@ee.ufcg.edu.br)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }