PHP

17 abr, 2020

Vizinho mais próximo: Inteligência Artificial com PHP

100 visualizações
Publicidade

Você já ouviu falar de vizinho mais próximo? Nos meus estudos de Inteligência Artificial esta foi a primeira coisa (não me lembro o motivo) que tive contato! Mas além de ser algo que parece ser simples foi algo que achei super interessante, algo que vi N possibilidades que possam ser aplicadas. Eu, por gostar muito de aeronáutica, além de T.I, imaginei inúmeras possibilidades nesse campo! 🛫 Depois, quero escrever um artigo sobre as coisas que imaginei referente a isso.

E você?! Consegue pensar em algo para a utilização desse algorítimo?! Não sabe o que é????? Continua lendo aí que eu te explico!

Esse foi um dos primeiros algorítimos que foram utilizados para determinar o problema mais óbvio que o próprio nome já diz 😅 “gerar caminhos mais curtos”. É possível definir também grupos, etc… Porém nem sempre é o ideal. Ah, mas como assim?! Bom, isso vai ficar pra outro artigo!

Talvez uma galera do R, Java, C++, Py, JS queira me sacrificar por eu dizer isso maaaas, sim, esse exemplo será feito com PHP 😮. Isso mesmo,

“AAAHH MAS PHP DA PRA FAZER IA?”

A resposta é sim! Porém, é bem óbvio que com muitas limitações, pois, o PHP não foi projetado pra isso, depois falo mais a respeito das melhores linguagens para inteligência artificial.

Pra facilitar o nosso trabalho irei usar a biblioteca php/ML, uma biblioteca simples e vai facilitar nosso entendimento, pois não vou entrar em detalhes de cálculos neste artigo (farei isso em outro). Aqui, apenas vou mostrar como funciona o algorítimo e uma de suas possibilidades.

Para que possamos calcular quem será o vizinho mais próximo e entender melhor o algorítimo, precisamos utilizar o plano cartesiano! Isso mesmo, lembra lá do ensino médio? haha. Ou tava matando aula?! 😏. Para quem não se lembra, esse é o famoso plano cartesiano:

Plano Cartesiano

Lembroou agoraa neeh?! 😏

Certo, agora pra realizarmos esse algorítimo, precisaremos das entradas, que nada mais são do que ponto dentro desse plano. As nossas entradas serão [[1, 3], [1, 4], [2, 4], [3, 1], [5, 1], [7, 2]], consegue visualizar essas entradas que chamaremos de labels no plano? Não? Vou te dar uma ajudinha, então. Para refrescar a mente, a primeira entrada sempre é no eixo X e o segundo dado se refere ao eixo Y. No plano, as nossas entradas ficariam assim:

Bem melhor de visualizar, não acham? Muito obrigado René Descartes 🙌.

Agora vamos imaginar uma situação real. Imaginem que os pontos são casas espalhadas em um mapa e A, B, C e D, pertencem ao bairro “barrudo” e E e F pertencem ao bairro “caminho”, a prefeitura classifica a casa no bairro de a cordo a proximidade da casa com o grupo de casas já existentes. Certa construtora resolve criar uma casa no ponto [3,3], conseguem dizer a qual bairro essa casa pertenceria?!


Vamos ao plano para ver em qual local essa casa ficaria situada, adicionamos a entrada no plano. E aí, consegue imaginar aonde ficaria?? Não conseguiu?! Então segue imagem:

Visualizando a olho nu é bem fácil perceber qual bairro a casa pertenceria! A imagem abaixo nos ajudará a ter uma visão melhor:

Vemos que o G [novo ponto adicionado] está dentro do mesmo bairro que pertence as casas A, B, C e D. Isso provavelmente mais pra frente geraria o que chamamos de viés (mas é assunto para um outro artigo).

Mas, fizemos todo o procedimento na mão, e se quiséssemos automatizar isso, como seria feito? Como disse no começo do artigo, temos uma excelente biblioteca a PHP/ML. Ela é muito simples de ser instalada e pode ser feita via composer, simplesmente com o código:

Após instalada a biblioteca, iremos referenciar e utilizar as seguintes classes, KNearestNeighbors e Minkowski para corrigir a distância. Abaixo o código comentado em PHP para que vocês possam ver como esse processo é bem simples quando utilizamos essa biblioteca:

Bem simples, não é mesmo? Espero que tenham gostado deste artigo, espero escrever mais artigos sobre AI. Irei usar outras linguagens também, pois não tenho preconceito com linguagem. Afinal, a melhor linguagem é aquela que atende a sua necessidade, qualquer dúvida ficarei à disposição pra responder cada um de vocês, só deixar nos comentários ou me chamar no Linkedin… até a próxima, pessoal…..