Uma gentil introdução a Machine Learning, Data Science e essas coisas legais
Constantemente me deparo com pessoas interessadas em aprender mais sobre data science. E isso se reflete principalmente na quantidade de blogs e materiais do tipo:
PROGRAMADORES ODEIAM ELE. |
---|
Torne-se um cientista de dados em 30 dias. Clique aqui. |
Embora eles façam um papel interessante popularizando os conceitos e permitindo um contato inicial com a área, eles tendem a ser um tanto superficiais. Quase sempre focando em apresentar várias bibliotecas, sem muito cuidado em apresentar uma introdução teórica mais robusta. Eu sei que é papo de nerd, mas, é importante, confie em mim. No mundo real, a coisa é um pouco mais difícil do que rodar jupyter notebooks com o tensorflow.
Mas, não se preocupe, sei que é importante colocar a mão na massa, e vamos fazer isso. Mas como eu sou hipster quero propor algo diferente, vamos evitar scikit-learn e outras bibliotecas convencionais, e implementar nossos próprios códigos, mesmo que eles nao tenham a melhor implementação possível, ainda serve como uma boa forma de aprendizado. E é algo que recomendo muito. Faça o seu. Experimente outras linguagens. É divertido.
Mas, sem mais delongas, antes de comecarmos a nos aprofundar, vem a pergunta de um milhão de dólares.
O que é Data Science? E Machine Learning? Pattern Recognition?
Pode parecer algo trivial, mas mesmo para profissionais da área, é bastante comum encontrar uma certa dificuldade em separar e definir esses conceitos de forma apropriada. Um dos principais motivos da dificuldade em definir esses termos, é que eles tendem a se misturar um pouco, o que por vezes, dificulta definir onde exatamente um começa e o outro termina. Mas vamos tentar esboçar nossa definiçao.
Machine Learning
Pessoas adoram resolver problemas, mas ao mesmo tempo, elas odeiam ter trabalho para resolvê-los.
Dentro desse dilema, procuramos sempre encontrar as formas mais simples para resolver nossos problemas. E a computação é isso: a ferramenta definitiva da preguica humana.
E por que isso?
Inicialmente, a solução de qualquer problema, envolvia desenvolvermos um hardware capaz de lidar com aquele determinado problema. Ábacos, prensas tipográficas, vitrolas, são máquinas mecânicas criadas para resolver problemas específicos. E, sempre que pensarmos num novo problema, naturalmente precisaremos de uma nova máquina (hardware) que seja implementado para resolve-lo.
Graças ao grande Alan Turing (ateu, homossexual e pai da computação) ganhamos nossos queridos computadores, que nada mais são do que máquinas (hardware) programáveis, onde podemos contruir uma máquina única, capaz de resolver diversos problemas, exigido apenas que escrevamos um conjunto de instruções (programas) para tal. Embora tenha sido um passo incrivel na resolução de problemas, escrever programas utilizando as intruções de uma máquina é uma tarefa de corno tediosa, exigindo conhecer a máquina em que serão executados, e consequentemente, restringindo seus programas a executarem em um hardware específico.
Como uma forma de superar essas limitações, surgiram as linguagens de alto nível, que, nada mais são, do que uma linguagem não ambígua (ou ambigua se voce estiver programando em C++) que pode ser traduzida para o conjunto de instruções de uma máquina, por meio dos compiladores (ou interpretadores). Com isso, podemos resolver problemas, escrevendo um único programa capaz de rodar em diversas máquinas.
Ainda nos sobrou um pequeno inconveniente: temos que escrever programas para resolver nossos problemas.
E é nesse ponto que entra o Machine Learning, que nada mais é do que ser capaz de escrever um único programa, que seja capaz de se adaptar de acordo com os dados fornecidos.
Isso parece um pouco genérico, eu sei. Mas, é por que Machine Learning é um conceito bastante genérico mesmo. Desde que seu programa seja capaz de alterar seu comportamento, para melhor se adequar aos dados, sem que seja necessário escrever um novo programa, você já está usando o paradigma de machine learning. Mas para mais detalhes sobre como podemos escrever aplicações baseadas em machine learning, vamos discutir um pouco a respeito de Pattern Recognition.
Pattern Recognition
Já sabemos que aprendizado de máquina, se baseia em criar algoritmos capazes de se adaptar aos dados.
Mas, como fazemos isso?
A forma mais comum é utilzar-se dos conceitos de pattern recognition (reconhecimento de padrões), que tem como objetivo encontrar padrões e regularidades nos dados.
Consultando nosso amigo Wikipedia um padrão pode ser descrito como:
Padrão (Pattern)
Um padrão, além do uso do termo para significar template, é uma discernível regularidade no mundo ou em um design feito pelo homem. Isto posto, os elementos em um padrão repetem-se de maneira previsível.
Podemos encontrar ainda outras definições do que é um padrão, mas essa serve bem aos nossos propósitos maléficos, pois o reconhecimento de padrões consiste de tentar encontrar regularidades previsíveis em um conjunto de dados.
Então, de forma simplificada, o reconhecimento de padrões será nossa estante de ferramentas que permite aplicarmos o aprendizado de máquinas a diversos problemas.