Principais fundamentos de Machine Learning

O cenário de Machine Learning

Livro: Hands–On Machine Learning with Scikit–Learn and TensorFlow

O Famoso por Filtro de Spam…

Há algumas décadas o Machine Learning foi introduzido como Reconhecimento de Caracteres (OCR) em algumas publicações especializadas, mas o primeiro aplicativo que realmente ficou famoso e conquistou o mundo na década de 1990, melhorando a vida de centenas de milhões de pessoas, foi o filtro de spam.

O filtro de spam foi seguido por centenas de aplicativos AM que agora, silenciosamente, fornecem centenas de produtos e recursos, de recomendações a buscas por voz, que utilizamos regularmente.

O que significa exatamente que uma máquina aprende alguma coisa? Começaremos esclarecendo o que é o Aprendizado de Máquina e por que utilizá-lo. Então, antes de iniciarmos a exploração do universo do Aprendizado de Máquina, conheceremos suas principais regiões e os cenários mais notáveis:

  • aprendizado supervisionado vs. não supervisionado,
  • aprendizado online vs aprendizado em lote,
  • aprendizado baseado em instâncias vs aprendizado baseado em modelo.

Em seguida, analisaremos o fluxo de trabalho de um típico projeto de Machine Learning, discutiremos os principais desafios que poderemos enfrentar e mostraremos como avaliar e ajustar um sistema de Aprendizado de Máquina.

O que é o Aprendizado de Máquina?

Aprendizado de Máquina é a ciência (e a arte) da programação de computadores para que eles possam aprender com os dados, é o campo de estudo que dá aos computadores a habilidade de aprender sem ser explicitamente programado.

Por que Utilizar o Aprendizado de Máquina?

Filtro de spam tradicional:

  1. Primeiro, identficiar as características do spam. Notar que algumas palavras ou frases (termos em inglês como “4U”, “credit card”, “free” e “amazing”) tendem a aparecer muito no campo do assunto. Talvez você note outros padrões no nome do remetente, no corpo do e-mail, e assim por diante.
  2. Segundo, escrever um algoritmo de detecção para cada um dos padrões observados, e, se fossem detectados, o programa marcaria esses e-mails como spam.
  3. Por último, testar o programa, e repetir os passos 1 e 2 até que esteja satisfatório.
Abordagem tradicional

Como o problema não é trivial, o programa provavelmente se tornará uma longa lista de regras complexas — com uma manutenção muito difícil.

Filtro de Spam baseado em Machine Learning

Em contrapartida, um filtro de spam baseado em técnicas de Aprendizado de Máquina aprende automaticamente quais palavras e frases são bons indicadores de spam, detectando padrões de palavras estranhamente frequentes em exemplos de spam se comparados aos exemplos dos e-mails “não spam” na figua abaixo. O programa é muito menor, de mais fácil manutenção e, provavelmente, mais preciso:

Abordagem com Machine Learning

Além disso, se os spammers perceberem que todos os seus e-mails contendo “4U” são bloqueados, poderão começar a escrever “For U”.

Um filtro de spam que utiliza técnicas de programação tradicionais precisaria ser atualizado para marcar os e-mails “For U”. Se os spammers continuam contornando seu filtro de spam, será preciso escrever novas regras para sempre.

Em contrapartida, um filtro de spam baseado em técnicas de Aprendizado de Máquina percebe automaticamente que “For U” tornou-se frequente no spam marcado pelos usuários e começa a marcá-los sem a sua intervenção:

Adaptando-se autoamaticamente às mudanças

Descoberta de padrões não aparentes

Aplicar técnicas de Machine Learning para se aprofundar em grandes quantidades de dados pode ajudar na descoberta de padrões que não eram aparentes. Isto é chamado de mineração de dados.

Machine Learning pode ajudar no ensino dos humanos

Resumindo, o Aprendizado de Máquina é ótimo para:

  • Problemas para os quais as soluções existentes exigem muita configuração manual ou longas listas de regras: um algoritmo de Aprendizado de Máquin geralmente simplifica e melhora o código;
  • Problemas complexos para os quais não existe uma boa solução quando utilizamos uma abordagem tradicional;
  • Ambientes flutuantes: um sistema de Aprendizado de Máquina pode se adaptar a novos dados;
  • Compreensão de problemas complexos e grandes quantidades de dados.

Tipos de Sistemas do Aprendizado de Máquina

Existem tantos tipos diferentes de sistemas de Aprendizado de Máquina que será útil classificá-los em extensas categorias com base em:

  • Serem ou não treinados com supervisão humana (supervisionado, não supervisionado, semissupervisionado e aprendizado por reforço);
  • Se podem ou não aprender rapidamente, de forma incremental (aprendizado online versus aprendizado por lotes);
  • Se funcionam simplesmente comparando novos pontos de dados com pontos de dados conhecidos, ou se detectam padrões em dados de treinamento e criam um modelo preditivo, como os cientistas (aprendizado baseado em instâncias versus aprendizado baseado em modelo).

Esses critérios não são exclusivos; podmeos combiná-los da maneira que quiser. Por exemplo, um filtro de spam de última geração pode aprender rapidamente com a utilização de um modelo de rede neural profundo treinado com exemplos de spam e não spam, fazendo deste um sistema de aprendizado supervisionado online, baseado em modelos.

Aprendizado Supervisionado

No aprendizado supervisionado, os dados de treinamento que fornecemos ao algoritmo incluem as soluções desejadas, chamadas de rótulos.

Conjunto de treinamento rotulado para aprendizado supervisionado

A classificação é uma tarefa típica do aprendizado supervisionado. O filtro de spam é um bom exemplo disso: ele é treinado com muitos exemplos de e-mails junto às classes (spam ou não spam) e deve aprender a classificar novos e-mails.

Prever um alvo de valor numérico é outra tarefa típica, como o preço de um carro a partir de um conjunto de características (quilometragem, idade, marca, etc.) denominadas previsores. Esse tipo de tarefa é chamada de regressão. Para treinar o sistema, precisamos fornecer muitos exemplos de carros incluindo seus previsores e seus labels (ou seja, seus preços).

Regressão

Regressão Logística

Alguns algoritmos de regressão também podem ser utilizados para classificação, e vice-versa. Por exemplo, a Regressão Logística é comumente utilizada para classificação pois pode produzir um valor que corresponde à probabilidade de pertencer a uma determinada classe (por exemplo, 20% de chances de ser spam).

Algortimos Supervisionados importantes:

  • k-Nearest Neighbours
  • Regressão Linear
  • Regressão Logística
  • Máquinas de Vetores de Suporte (SVM)
  • Árvores de Decisão e Florestas Aleatórias
  • Redes Neurais

Aprendizado Não Supervisionado

No aprendizado não supervisionado, os dados de treinamento não são rotulados. O sistema tenta aprender sem um professor.

Conjunto de treinamento não rotulado para aprendizado não supervisionado

Algortimos não supervisionados importantes:

1. Clustering

  • k-Means
  • Clustering Hierárquico [HCA, do inglês]
  • Maximização da Expectativa

2. Visualização e redução da dimensionalidade

  • Análise de Componentes Principais [PCA, do inglês]
  • Kernel PCA
  • Locally-Linear Embedding (LLE)
  • t-distributed Stochastic Neighbor Embedding (t-SNE)

3. Aprendizado da regra da associação

  • Apriori
  • Eclat

Por exemplo, digamos que tenhamos muitos dados sobre os visitantes de umu blog. Queremos executar um algoritmo de clustering para tentar detectar grupos de visitantes semelhantes. Em nenhum momento é dito ao algoritmo a qual grupo o visitante pertence: o algoritmo encontrará essas conexões sem ajuda.

Por exemplo, ele pode notar que 40% dos visitantes são homens que adoram histórias em quadrinhos e geralmente leem o blog à noite, enquanto 20% são jovens amantes de ficção científica e o visitam durante os finais de semana, e assim por diante.

Algoritmo de Clustering Hierárquico

Pare este caso, se utilizar um algoritmo de clustering hierárquico, ele também poderá subdividir cada grupo em grupos menores. O que pode ajudar a segmentar postagens para cada um dos leitores.

Clustering

Algoritmos de visualização não supervisionados

Os algoritmos de visualização também são bons exemplos de algoritmos de aprendizado não supervisionado: são alimentados com muitos dados complexos e não rotulados e exibem uma representação 2D ou 3D dos dados que podem ser facilmente plotados

Esses algoritmos tentam preservar o máximo da estrutura (por exemplo, tentam fazer com que os clusters no espaço de entrada que estão separados não se sobreponham na visualização) para que possamos entender como os dados estão organizados e talvez identificar padrões ignorados

Visualização t-SNE destacando grupos semânticos

Redução de Dimensionalidade (simplificar dados)

A redução da dimensionalidade é uma tarefa que tem o objetivo de simplificar os dados sem perder muita informação.

Uma maneira de fazer isso é mesclar várias características correlacionadas em uma. Por exemplo, a quilometragem de um carro pode estar muito correlacionada com seu tempo de uso, de modo que o algoritmo da redução de dimensionalidade irá mesclá-los em uma característica que representa o desgaste do carro. Isso é chamado de extração de características.

Detecção de anomalias (Não-Supervisionado)

Uma importante tarefa não supervisionada é a detecção de anomalias. Por exemplo:

  • detecção de transações incomuns em cartões de crédito para evitar fraudes,
  • detectar defeitos de fabricação,
  • remover automaticamente outliers de um conjunto de dados antes de fornecê-lo a outro algoritmo de aprendizado.

O sistema é treinado com instâncias normais e, quando vemos uma nova instância, pode dizer se ela parece normal ou se é uma provável anomalia.

Detecção da anomlaia

Regras de Associação (Não-Supervisionado)

Finalmente, outra tarefa comum não supervisionada é o aprendizado de regras de associação, cujo objetivo é se aprofundar em grandes quantidades de dados e descobrir relações interessantes entre atributos.

Fraldas e cerveja

Por exemplo, supondo que possuímos um supermercado. Executar uma regra de associação em seus registros de vendas pode revelar que as pessoas que compram molho de churrasco e batatas fritas também tendem a comprar carnes. Desta forma, vamos deixar esses itens próximos uns dos outros.

Aprendizado Semi-supervisionado

Alguns algoritmos podem lidar com dados de treinamento parcialmente rotulados, uma grande quantidade de dados não rotulados e um pouco de dados rotulados. Isso é chamado de aprendizado semi-supervisionado.

Exemplos semi-supervisionados

Alguns serviços de hospedagem de fotos, como o Google Fotos, são bons exemplos disso. Ao carregar todas as fotos de família, o aplicativo reconhecerá automaticamente que a mesma pessoa (A) aparece nas fotos 1, 5 e 11 enquanto outra pessoa (B) aparece nas fotos 2, 5 e 7. Esta é a parte não supervisionada do algoritmo (agrupamento).

Agora,o sistema apenas precisa que digamos uem são essas pessoas. Com apenas um rótulo por pessoa e ele será capaz de nomear todos, o que é útil para pesquisar fotos.

Aprendizado Semissupervisionado

A maior parte dos algoritmos de aprendizado semissupervisionado é de combinaçõesde algoritmos supervisionados e não supervisionados. Por exemplo, as redes neurais de crenças profundas [DBNs, do inglês] são baseadas em componentes não supervisionados,chamados máquinas restritas de Boltzmann [RBMs, do inglês], empilhados uns em cima dos outros. As RBMs são treinadas sequencialmente de forma não supervisionada, e então todo o sistema é ajustado utilizando-se técnicas de aprendizado supervisionado.

Aprendizado por Reforço

O aprendizado por reforço é um bicho muito diferente. O sistema de aprendizado, pode observar o ambiente, selecionar e executar ações e obter recompensas em troca — ou penalidades na forma de recompensas negativas. Ele deve aprender por si só qual é a melhor estratégia, chamada de política, para obter o maior número de recompensas ao longo do tempo. Uma política define qual ação o agente escolher quando está em determinada situação.

Aprendizado por reforço

Aprendizado Online e em Lote

Outro critério utilizado para classificar os sistemas de Aprendizado de Máquina é se o sistema pode ou não aprender de forma incremental a partir de um fluxo de dados recebido.

Aprendizado em lote

No aprendizado em lote, o sistema é incapaz de aprender de forma incremental: ele deve ser treinado com a utilização de todos os dados disponíveis. Isso geralmente demandará muito tempo e recursos de computação, portanto, normalmente é feito offline. Primeiro, o sistema é treinado, em seguida, é lançado em produção, e roda sem aprender mais nada; apenas aplicando o que aprendeu. Isso é chamado de aprendizado offline.

Felizmente, todo o processo de treinamento, avaliação e lançamento de um sistema deAprendizado de Máquina pode ser automatizado facilmente, então mesmo um sistema de aprendizado em lote pode se adaptar às mudanças. Basta atualizar os dados e treinar a partir do zero uma nova versão do sistema sempre que necessário.

Esta solução é simples e geralmente funciona bem, mas, com a utilização do conjuntocompleto de dados, o treinamento pode demorar muitas horas, então você normalmente treinará um novo sistema apenas a cada 24 horas ou mesmo semanalmente. Se seu sistema precisa se adaptar a dados que mudam rapidamente (por exemplo, prever os preços das ações), você precisa de uma solução mais reativa.

Além disso, o treinamento no conjunto completo de dados requer muitos recursos de computação (CPU, espaço de memória, espaço em disco, E/S do disco, E/S de rede, etc.). Se a quantidade de dados for enorme, talvez seja impossível utilizar um algoritmo de aprendizado em lote.

Finalmente, se o seu sistema precisa ser capaz de aprender de forma autônoma e tem recursos limitados, então, seria um grave erro carregar grandes quantidades de dados de treinamento e usar inúmeros recursos para treinar por horas todos os dias.

Felizmente, uma opção melhor em todos esses casos seria utilizar algoritmos capazes de aprender de forma incremental.

Aprendizado online (Fluxos contínuos de dados)

No aprendizado online, treinamos o sistema de forma incremental, alimentando sequencialmente as instâncias de dados individualmente ou em pequenos grupos, chamados de minilotes. Cada etapa do aprendizado é rápida e barata, então o sistema pode aprender rapidamente sobre os novos dados assim que eles chegam.

Aprendizado online

O aprendizado online é excelente para sistemas que recebem dados como um fluxo contínuo (por exemplo, preços das ações) e precisam se adaptar às mudanças rápida ou autonomamente.

Também é uma boa opção se os recursos de computação são limitados: uma vez que um sistema de aprendizado online aprendeu sobre as novas instâncias de dados, ele não precisa mais delas, então podemos descartá-las (a menos que queira reverter para um estágio anterior e “reproduzir” os dados). O que pode economizar muito espaço.

Os algoritmos de aprendizado online também podem ser utilizados para treinar sistemas em grandes conjuntos de dados que não cabem na memória principal de uma máquina (isto é chamado de out-of-core learning). O algoritmo carrega parte dos dados, executa uma etapa do treinamento nesses dados e repete o processo até que ele tenha sido executado em todos os dados.

Utilizando aprendizado online para lidar com grandes conjuntos de dados

Um parâmetro importante dos sistemas de aprendizado online é a rapidez com que eles devem se adaptar às mudanças dos dados: isto é chamado de taxa de aprendizado.

Alta taxa de aprendizado

Se definirmos uma alta taxa de aprendizado, o sistema se adaptará rapidamente aos novos dados, mas também tenderá a se esquecer rapidamente os antigos (não queremos um filtro de spam que sinalize apenas os tipos mais recentes de spam).

Baixa taxa de aprendizado

Por outro lado, se definirmosuma baixa taxa de aprendizado, o sistema terá mais inércia; isto é, aprenderá mais devagar, mas também será menos sensível ao apontar novos dados ou sequências de pontos de dados não representativos.

Um grande desafio no aprendizado online é que, se incluirmos dados ruins no sistema, seu desempenho diminuirá gradualmente. Se estamos falando de um sistema ao vivo, os clientes perceberão.

Por exemplo, dados ruins podem vir de um sensor com mau funcionamento em um robô, ou de alguém que envia um spam a um mecanismo de pesquisa para tentar se posicionar no topo. Para reduzir esse risco, precisamos monitorar de perto o sistema e desligar o aprendizado rapidamente se detectar uma queda no desempenho (e possivelmente reverter para um estágio anterior de trabalho). Também poderemos monitorar os dados de entrada e reagir a dados anormais (por exemplo, com a utilização de um algoritmo de detecção de anomalias).

Aprendizado Baseado em Instância vs Baseado em Modelo

Mais uma forma de categorizar os sistemas de Aprendizado de Máquina é por meio da generalização. A maioria das tarefas de Aprendizado de Máquina faz previsões. Isso significa que, dada uma série de exemplos de treinamento, o sistema precisa ser capaz de generalizar em exemplos que nunca viu antes. Ter uma boa medida do desempenho nos dados de treinamento é bom, mas insuficiente; o verdadeiro objetivo é ter um bom desempenho em novas instâncias.

Aprendizado baseado em instância

Possivelmente, a forma mais trivial de aprendizado é simplesmente decorar. Se fosse criar um filtro de spam desta forma, ele apenas marcaria todos os e-mails que são idênticos em relação aos e-mails que já foram marcados pelos usuários — não seria a pior solução, mas certamente não é a melhor.

Em vez de marcar apenas e-mails que são idênticos aos e-mails de spam conhecidos, o filtro de spam pode ser programado para marcar também e-mails que são muito semelhantes aos e-mails conhecidos de spam. Isso requer uma medida de similaridade entre dois e-mails. Uma medida de similaridade (uma característica muito básica) entre dois e-mails poderia ser contar o número de palavras que eles têm em comum. O sistema marcaria um e-mail como spam se tivesse muitas palavras em comum com um e-mail de spam conhecido.

Aprendizado baseado em instância

Isso é chamado de aprendizado baseado em instância: o sistema aprende os exemplos por meio da memorização e, em seguida, generaliza para novos casos utilizando uma medida de similaridade:

Aprendizado baseado em instância

Aprendizado baseado em modelo

Outra maneira de generalizar a partir de um conjunto de exemplos seria construir um modelo desses exemplos e utilizar esse modelo para fazer previsões. Isso é chamado de aprendizado baseado em modelo.

Aprendizado baseado em modelo

Principais Desafios do Aprendizado de Máquina

Em suma, uma vez que a tarefa principal é selecionar um algoritmo de aprendizado e treiná-lo em alguns dados, as duas coisas que podem dar errado são: “algoritmos ruins” e “dados ruins”.

Quantidade Insuficiente de Dados de Treinamento

Para que uma criança aprenda o que é uma maçã, é preciso que se aponte para uma maçã e diga “maçã” (possivelmente repetindo algumas vezes esse procedimento). Agora, a criança consegue reconhecer maçãs em todos os tipos de cores e formas. Genial.

O Aprendizado de Máquina ainda não está lá; é preciso uma grande quantidade de dados para que a maioria dos algoritmos de Aprendizado de Máquina funcione corretamente.

É preciso milhares de exemplos mesmo para problemas muito simples, e paraproblemas complexos, como reconhecimento de imagem ou da fala, precisará de milhões de exemplos (a menos que possa reutilizar partes de um modelo existente).

Dados de Treinamento Não Representativos

A fim de generalizar bem, é crucial que os dados de treinamento sejam representativos dos novos casos para os quais desejamos generalizar, não importa se utilizamos o aprendizado baseado em instâncias ou o aprendizado baseado em modelo.

Dados de Baixa Qualidade

Obviamente, se os dados de treinamento estiverem cheios de erros, outliers e ruídos (por exemplo, devido a medições de baixa qualidade), o sistema terá mais dificuldade para detectar os padrões subjacentes, portanto, menos propício a um bom funcionamento. Muitas vezes vale a pena perder um tempo limpando dados de treinamento.A verdade é que a maioria dos cientistas de dados gasta uma parte significativa de tempo fazendo exatamente isso. Por exemplo:

  • Se algumas instâncias são claramente outliers, isso pode ajudar a descartá-las ou tentar manualmente a correção dos erros;
  • Se faltam algumas características para algumas instâncias (por exemplo, 5% dos seus clientes não especificaram sua idade), deve decidir entre ignorar completamente esse atributo, ignorar essas instâncias, preencher os valores ausentes (por exemplo, com a média da idade), ou treinar um modelo com a característica e um modelo sem ela, e assim por diante.

Overfitting

Digamos que você está visitando um país estrangeiro e o taxista o rouba. Você é tentado a dizer que todos os motoristas de táxi nesse país são ladrões. Generalizar é algo que nós humanos fazemos com muita frequência e, infelizmente, as máquinas podem cair na mesma armadilha se não tivermos cuidado.

Underfitting dos dados de Treinamento

O subajuste é o oposto de sobreajuste: ocorre quando o modelo é muito simples para o aprendizado da estrutura subjacente dos dados. Por exemplo, um modelo linear de satisfação de vida é propenso a ser subajustado; a realidade é mais complexa do que o modelo, por isso suas previsões tendem a ser imprecisas mesmo nos exemplos de treinamento.

As principais opções para resolver esses problemas são:

  • Selecionar um modelo mais poderoso, com mais parâmetros;
  • Alimentar o algoritmo de aprendizado com melhores características (feature engineering);
  • Reduzir as restrições no modelo (por exemplo, reduzindo o hiperparâmetro de regularização).

Testando e Validando

A única maneira de saber o quão bem um modelo generalizará em novos casos é de fato testá-lo em novos casos. Uma forma de pôr isso em prática é colocar o modelo em produção e monitorar a qualidade do seu desempenho. Isso funciona bem, mas, se seu modelo for muito ruim, os usuários se queixarão — e esta não é a melhor ideia.

Como esses nomes implicam, treinar o modelo utilizando o conjunto de treinamento e testar utilizando o conjunto de teste. A taxa de erro em novos casos é chamada de erro de generalização (ou erro fora da amostra) e, ao avaliar o modelo no conjunto de teste, você obtém uma estimativa desse erro.

O valor indica se o seu modelo terá um bom funcionamento em instâncias inéditas. Se o erro de treinamento for baixo (ou seja, seu modelo comete alguns erros no conjunto de treinamento), mas seu erro de generalização é alto, isso significa que o modelo está se sobreajustando aos dados de treinamento.

É muito simples avaliar um modelo: basta utilizar um conjunto de teste. Agora, como decidir por um modelo? Uma opção será treinar ambos utilizando o conjunto de teste e comparar se eles generalizam bem.

Uma solução comum para este problema é ter um segundo conjunto de retenção chamado conjunto de validação. Você treina vários modelos com vários hiperparâmetros utilizando o conjunto de treinamento, seleciona o modelo e os hiperparâmetros que atuam melhor no conjunto de validação, e, quando estiver contente com seu modelo, executa um único teste final no conjunto de teste para obter uma estimativa do erro de generalização.

Validação Cruzada

Para evitar “desperdiçar” muitos dados de treinamento em conjuntos de validação, uma técnica comum é utilizar a validação cruzada: o conjunto de treinamento é dividido em subconjuntos complementares e cada modelo é treinado com uma combinação diferente desses subconjuntos e validado em relação às partes restantes.

Uma vez selecionados o tipo de modelo e os hiperparâmetros, um modelo final é treinado com a utilização desses hiperparâmetros no conjunto completo de treinamento e o erro generalizado é medido no conjunto de testes.

Recapitulando

  • Aprendizado de Máquina é fazer com que as máquinas evoluam em algumastarefas aprendendo com os dados, em vez de ter que programar as regras explicitamente;
  • Em um projeto do ML, coletamos dados em um conjunto de treinamento e os fornece para um algoritmo de aprendizado. Se o algoritmo estiver baseado em modelo, ele ajusta alguns parâmetros para adequar o modelo ao conjunto de treinamento (ou seja, para fazer boas previsões no próprio conjunto de treinamento), e então, se tudo der certo, também poderá fazer boas previsões em novos casos.
  • Se o algoritmo for baseado em instância, ele simplesmente decora os exemplos e utiliza uma medida de similaridade generalizando para novas instâncias;
  • O sistema não terá um bom funcionamento se o seu conjunto de treinamento for muito pequeno ou se os dados não forem representativos, ruidosos ou poluídos com características irrelevantes (entra lixo, sai lixo). Por último, o modelo não precisa ser nem simples demais (subajustado) nem muito complexo (superajustado).

Composing a repository of books (i bought), authors (i follow) & blogs (direct ones) for my own understanding.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store