O que é Aprendizado de Máquina (Machine Learning)? 

E aí, galera! ✌️ 

Um dia, trocando ideia com um brother ou colega, pode pintar aquela pergunta sinistra: 

“Mas, afinal, o que é esse tal de Machine Learning?” 🤔 

A parada desse post é te dar uns caminhos pra pensar e uma definição “na lata” que gruda na mente. 

A gente vai começar sacando as definições mais “oficiais” que a galera que manja muito usa nos livros. E no final, a gente vai construir uma definição de Machine Learning feita pra nós, desenvolvedores, e uma frase chave pra mandar quando alguém perguntar: “E aí, qual é a desse Machine Learning?”. 😉 

 

As Definições da Galera que Sabe Tudo 🤓 

Essas definições são tipo a fundação pra gente construir um entendimento mais profundo da coisa. 

Eu escolhi essas quatro pra mostrar uns ângulos diferentes e que valem a pena sobre essa área. Na real, a gente aprende na prática que esse mundo é um mix de métodos, e escolher um ponto de vista é essencial pra não se perder. 

 

A Bíblia da Ciência da Computação (McGraw-Hill International Editions Computer Science Series) 📚 

No livro “Machine Learning”, que tem esse título gigante aí, logo na introdução, eles mandam essa: 

O campo do aprendizado de máquina se preocupa em como construir programas de computador que melhoram automaticamente com a experiência. 

Curti essa definição curta e direta, e ela vai ser a base da definição “pra gente” que a gente vai criar no final. 

Saca só que eles falam de “programas de computador” e de “melhoria automática”. Escrever programas que se turbinam sozinhos é demais! 🤯 

Na introdução, eles ainda soltam uma fórmula que você vai ver direto por aí: 

Diz-se que um programa de computador aprende com a experiência “E” em relação a alguma tarefa “T” e medida de desempenho “P”, se o seu desempenho em tarefas em “T”, conforme medido por “P” melhora com a experiência “E”. 

Calma, não se assusta com os termos! Essa fórmula é super útil. 

A gente pode usar essa fórmula como um mapa e botar [E, T, e P] no topo de umas colunas numa tabela e listar uns problemas complexos sem deixar muita margem pra dúvida. Dá pra usar como uma ferramenta pra gente pensar com clareza sobre quais dados coletar (E), quais decisões o software precisa tomar (T) e como a gente vai avaliar se ele tá mandando bem (P). Essa é a moral dessa fórmula, por isso a galera repete tanto como a definição padrão. Guarda essa carta na manga! 😉 

Os Elementos do Aprendizado Estatístico 📊 

O livro “Os Elementos do Aprendizado Estatístico: Mineração de Dados, Inferência e Previsão” foi escrito por três caras feras em estatística de Stanford e eles mesmos descrevem como um jeito estatístico de organizar a área de estudo deles. 

Na introdução, eles mandam essa real: 

Vastas quantidades de dados estão sendo geradas em muitos campos, e o trabalho dos estatísticos é entender tudo: extrair padrões e tendências importantes e entender “o que os dados dizem”. Nós chamamos isso de aprender com os dados. 

Na moral, o trampo de um estatístico é usar as ferramentas da estatística pra interpretar os dados dentro do contexto de cada área. E parece que os caras incluem todo o “Machine Learning” como uma ajuda nessa busca. Curioso que eles botaram “Mineração de Dados” no subtítulo do livro. 

Os estatísticos aprendem com os dados, mas o software também aprende, e a gente aprende com o que o software aprende. Com as decisões que ele toma e os resultados que ele alcança usando vários métodos de Machine Learning. 🤯 

Reconhecimento de Padrões 👁️ 

O reconhecimento de padrões tem suas origens na engenharia, enquanto o aprendizado de máquina surgiu da ciência da computação. No entanto, essas atividades podem ser vistas como duas facetas do mesmo campo… 

Lendo isso, dá pra sacar que a galera vê a área de um ponto de vista da Engenharia, e só depois usou a Ciência da Computação pra aplicar os mesmos métodos. Reconhecimento de padrões é um termo mais da galera da Engenharia ou do Processamento de Sinal. 

Essa é uma visão madura e que a gente deveria copiar. No geral, não importa qual área “dona” de um método, se ele serve pra gente, nos levando mais perto de uma visão ou de um resultado “aprendendo com os dados”, então a gente pode chamar de Machine Learning. 🤝 

 

A Definição de “Machine Learning” pra Nós, Desenvolvedores 👨‍💻👩‍💻 

Agora a gente chega na parte de quebrar tudo isso em miúdos pra gente, que bota a mão na massa no código. 

Primeiro, a gente olha para uns problemas complexos que não abrem pra gente desmontar e resolver com uns processos passo a passo. Isso mostra o poder do Machine Learning. Depois, a gente monta uma definição que cola com a gente, desenvolvedores, e que a gente pode usar sempre que alguém perguntar – “E aí, qual é desse Machine Learning?”, pra outros Devs. 😉 

Problemas Cabulosos 🤯 

Como desenvolvedor, você vai trombar com uns tipos de problemas que não cedem a uma solução lógica e processual de jeito nenhum. 

O que eu quero dizer é que tem uns problemas que não dá ou não compensa sentar e escrever todas as linhas de código necessárias pra resolver. 

“Herege!” 🤬 Eu ouço o seu cérebro “Dev” gritar. 

É a real. 🤷‍♂️ 

Pega o caso do dia a dia de decidir se um e-mail é “spam” ou “não spam”. Esse é um exemplo que rola direto quando a galera tá começando a falar de Machine Learning. Como você escreveria um programa pra filtrar os e-mails que chegam na sua caixa e decidir se manda pra lixeira ou pra caixa de entrada? 🤔 

Provavelmente você começa juntando uns exemplos e dando uma olhada neles, pensando fundo na parada. Você vai procurar uns padrões nos e-mails que são spam e nos que não são. Você vai tentar abstrair esses padrões pra que suas “regras” funcionem com uns e-mails novos no futuro. Você vai ignorar uns e-mails bizarros que provavelmente nunca mais vão aparecer. Você vai dar uma revisada nos e-mails de vez em quando e pensar em abstrair uns padrões novos pra melhorar a decisão. 

Tem um algoritmo de Machine Learning aí no meio disso tudo, só que quem executou foi você, o programador, em vez do computador. Esse sistema de regras que você criou na mão seria tão bom quanto a sua capacidade de tirar as regras dos dados e botar elas no programa. 

Dava pra fazer, mas ia gastar uma grana e seria um pesadelo pra dar manutenção. 💸 

Machine Learning na Veia ❤️ 

No exemplo aí de cima, eu tenho certeza que o seu cérebro “Dev”, aquela parte que não sossega enquanto não automatiza tudo, sacou a oportunidade de automatizar e turbinar esse “meta-processo” de tirar padrões dos exemplos. 

Os métodos de Machine Learning são esse processo automatizado. 🤖 

No nosso exemplo de spam/não-spam, os exemplos (E) são os e-mails que a gente juntou. A tarefa (T) foi um problema de decisão (chamado de classificação) de marcar cada e-mail como spam ou não e botar ele na pasta certa. A nossa medida de desempenho (P) seria algo tipo a precisão em porcentagem (decisões certas divididas pelo total de decisões vezes 100), variando de 0% (péssimo) a 100% (top). 

Preparar um programa pra tomar decisões assim geralmente é chamado de treinamento, onde os exemplos que a gente juntou são chamados de conjunto de treinamento e o programa é chamado de modelo, tipo um modelo do problema de classificar spam de não-spam. Pra nós, desenvolvedores, essa linguagem cola: um modelo tem um estado e precisa ser guardado, o treinamento é um processo que rola uma vez e talvez precise rodar de novo, e a classificação é a tarefa que o programa executa. Tudo faz sentido pra gente. 👍 

A gente consegue ver que alguns termos usados nas definições “oficiais” não são tão legais pra nós, programadores. Tecnicamente, todos os programas que a gente escreve são automações, então comentar que o Machine Learning aprende automaticamente não diz muita coisa. 😉 

Juntando as Peças… 🧩 

Então, bora ver se a gente consegue usar essas peças e montar uma definição de Machine Learning pra desenvolvedores. Que tal essa: 

“Machine Learning é o treinamento de um modelo a partir de dados que generaliza uma decisão contra uma medida de desempenho.” 

Treinar um modelo sugere usar exemplos de treinamento. Um modelo sugere o estado que o programa adquiriu com a experiência. Generaliza uma decisão sugere a capacidade de tomar uma decisão com base em dados e prever dados que vão aparecer no futuro e pra qual uma decisão vai ser necessária. Finalmente, contra uma medida de desempenho sugere que tem um objetivo e uma qualidade que a gente quer alcançar com o modelo que a gente tá preparando. 

Sem muita poesia, será que você consegue bolar uma definição de Machine Learning mais precisa ou mais direta pra desenvolvedores? 🤔 

Compartilha a sua definição nos comentários aí embaixo! 👇 

Deixa um comentário e conta pra gente como você entende essa área. O que é “Machine Learning” pra você? Conhece mais uns materiais legais pra gente dar uma olhada? 

Manda a brasa nos comentários! 😉 

 

 

 

 

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress