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?”. 😉
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.
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.
Calma, não se assusta com os termos! Essa fórmula é super útil. A gente pode usar como um mapa pra 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).
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.
Pega o caso do dia a dia de decidir se um e-mail é “spam” ou “não spam”. 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.
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. 💸
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:
Experiência (E): Os e-mails que a gente juntou (conjunto de treinamento)
Tarefa (T): Problema de decisão (classificação) de marcar cada e-mail como spam ou não
Medida de Desempenho (P): Precisão em porcentagem (decisões certas / total de decisões × 100)
Treinamento: Preparar um programa pra tomar decisões
Conjunto de Treinamento: Os exemplos que a gente juntou
Modelo: O programa treinado, 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. 👍
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.
- Treinar um modelo: Sugere usar exemplos de treinamento
- 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
- 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?
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! 😉