Quando fala-se de machine learning (aprendizado de máquina), a maioria das pessoas pensa em um mordomo confiável ou um Exterminador do Futuro. Apesar desta idealização futurista, o aprendizado de máquina já é uma realidade há décadas. Sim, décadas. A primeira aplicação de sucesso foi o filtro de spam em 1990.
Utilizando o Reconhecimento Ótico de Caracteres (OCR), uma máquina aprendeu a classificar quais e-mails eram ou não spam. Funcionou tão bem que hoje dificilmente precisamos marcar algum como tal.
Trinta anos depois os estudos e aplicações nessa área cresceram significativamente e tendem a continuar crescendo nos próximos anos, por isso é importante estar atenta a esta área da computação que ganha a cada dia mais espaço nos grupos de pesquisa e no mercado de trabalho.
Mas afinal, o que é Machine learning?
Acredita-se que há uma linha tênue entre ciência e arte da programação de computadores que permite que eles, os computadores, possam aprender com os dados que recebem, ou seja, é dar a eles a habilidade de aprender sem ser explicitamente programado.
Quando utilizar aprendizado de máquina?
Atualmente, existe uma lista gigantesca de aplicações do machine learning, então além de procurar por exemplos já existentes, avalie se o problema que você precisa resolver encaixa-se em algum destes casos:
- Problemas que possuem soluções que exigem muita configuração manual ou que possuam muitas regras;
- Problemas complexos sem solução simples na abordagem tradicional;
- Contextos com muitas mudanças;
- Compreensão de problemas complexos e com grandes quantidades de dados.
Tipos de sistema de aprendizagem da máquina
Existem tantos tipos de sistema de aprendizado que é necessário classificá-los pelo tipo de supervisão, se permitem aprendizado incremental e pela forma de generalização. Esses critérios não são exclusivos, ou seja, pode-se utilizar de mais de um sistema simultaneamente.
1) Tipo de supervisão
Supervisionado
Através de um conjunto de dados que contém as soluções desejadas é realizada a classificação da tarefa. No filtro de spam, por exemplo, o sistema é treinado com muitos exemplos de e-mails com ou sem spam.
Os algoritmos mais importantes do aprendizado supervisionado são:
- K-Nearest neighbors;
- Regressão linear;
- Regressão logística;
- Máquinas de vetores de suporte (SVM)
- Árvores de decisão;
- Florestas aleatórias;
- Redes neurais.
Não-supervisionado
Como o próprio nome já sugere, no aprendizado não-supervisionado não são passados rótulos para o sistema e o mesmo tenta aprender com base nos dados que são apresentados.
Os algoritmos classificam os dados com base em características semelhantes e criam grupos, às vezes subgrupos em busca de relações entre eles.
Os algoritmos mais importantes do aprendizado não-supervisionado são:
- Clustering
- k-Means
- Clustering Hierárquico (HCA)
- Maximização a Expectativa
- Visualização e redução da dimensionalidade
- Análise de Componentes Principais (PCA)
- Kernel PCA
- Locally-Linear Embedding(LLE)
- t-distributed Stochastic Neighbor Embedding(t-SNE)
- Aprendizado da regra da associação
- Apriori
- Eclat
Semi-supervisionado
Alguns algoritmos são capazes de lidar com dados de treinamento parcialmente rotulados, sem rótulos e alguns dados rotulados. Um ótimo exemplo é o Google fotos, pois em um conjunto de imagens ele é capaz de reconhecer que nas fotos 1, 4 e 8 aparece a mesma pessoa, enquanto que na 2, 4 e 7 outra (agrupamento não supervisionado). A partir do momento que você identificar a primeira pessoa em uma foto, ele será capaz de reconhecê-la em todas as outras.
Os algoritmos utilizados neste tipo de aprendizado, normalmente são uma mistura de supervisionados e não-supervisionados, assim como as Redes neurais de crenças profundas, que se baseiam em componentes não supervisionados - máquinas restritas de Boltzmann - empilhadas e posteriormente são treinadas sequencialmente de forma não supervisionada.
Por reforço
O aprendizado por reforço é o mais diferente de todos e baseia-se em uma política de obter a maior quantidade possível de recompensas, sendo assim, conforme as ações que o agente realiza ele recebe recompensas para o que é positivo e penalidades para o que for negativo. Normalmente robôs utilizam deste algoritmo para aprender a andar.
2) Incremental/não incremental
Aprendizado em lote
Este tipo de sistema é incapaz de aprender de forma incremental porque é treinado com todos os dados disponíveis. Isso normalmente demanda muito tempo e recursos computacionais, então, normalmente é feito offline e em seguida liberado para uso.
Aprendizado online
Este tipo de sistema permite o aprendizado incremental, pois ele é alimentado com pequenas instâncias ou pequeno grupos, também conhecidos como minilotes. Assim que cada uma dessas instâncias é interpretada ela pode ser descartada, o que é ideal para quem tem poucos recursos computacionais. Esse critério normalmente é utilizado para sistemas que necessitam adaptar-se rapidamente às mudanças de dados.
3) Generalização
Grande parte dos sistemas de aprendizado fazem previsões, sendo assim, a partir de um conjunto de exemplos de treinamento, o sistema precisa ser capaz de generalizar em exemplos que ele não viu anteriormente. Para tal, há duas formas de fazê-lo, por instância ou por modelo.
Aprendizado baseado em instância
No aprendizado baseado em instância o sistema aprende por meio de memorização e depois generaliza para novos casos utilizando uma medida que indique a qual item eles são semelhantes. Simplificando muito o exemplo, na classificação do e-mail spam, a classificação poderia ser feita através da quantidade de palavras em comum no novo e-mail e no que é spam.
Aprendizado baseado em modelo
Neste tipo de sistema, a generalização é feita através de um modelo criado baseado em um conjunto de exemplos. Imagine que dados de fontes diferentes são relacionados e identifica-se uma tendência a partir disso. Essa tendência permite que um modelo seja criado e facilite a generalização. Por exemplo, relacionar a renda per capita dos países com a satisfação de vida por país. Existindo uma relação entre estes dados, cria-se o modelo e é possível prever a satisfação de vida a partir da renda per capita do país.
Enfim, chegamos ao final desta publicação que apresentou alguns conceitos iniciais sobre machine learning. Espero que essas informações tenham te ajudado e que te inspirem a estudar mais sobre esta área da computação de computadores.
Qualquer dúvida, comentário ou complemento let me know.