BT

A sua opinião é importante! Por favor preencha a pesquisa do InfoQ!

Introdução ao aprendizado de máquinas

| por Rafael Fernandes Seguir 0 Seguidores , traduzido por Luis Cesar Barreto Seguir 4 Seguidores em 04 set 2017. Tempo estimado de leitura: 10 minutos |

A note to our readers: As per your request we have developed a set of features that allow you to reduce the noise, while not losing sight of anything that is important. Get email and web notifications by choosing the topics you are interested in.

Pontos Principais

  • A maioria dos projetos de Aprendizado de Máquinas resulta em uma classificação ou regressão geralmente utilizando abordagens de aprendizado supervisionadas;
  • A extração de características dos dados é normalmente a parte crítica da maioria dos processos de aprendizado de máquinas;
  • Algoritmos de aprendizado não supervisionado como o K-means, permitem agrupar os dados quando não se sabe previamente os rótulos;
  • A maioria dos algoritmos de aprendizado de máquinas são elaborados para encontrar parâmetros para seus modelos de uma forma que melhor se ajustem aos dados;
  • Sobre-ajuste (overfitting) é um problema comum que os cientistas de dados enfrentam quando utilizam um dataset limitado, pois podem não generalizar quando novos dados forem adicionados.

A Ciência de Dados está se tornando uma habilidade fundamental para os desenvolvedores e gerentes de todos os setores e parece ser divertido de explorar, mas bastante complicado. Existem muitas opções de engenharias e análises para aprender, e é difícil saber se está fazendo a coisa certa ou se está entrando em uma armadilha e comprometendo o resultado. Nessa série, serão exploradas várias formas de entender Ciência de Dados, entender se é ou não necessária e como pode ser útil.

Este artigo InfoQ faz parte da série "Entendendo a Ciência de Dados". Inscreva-se para receber notificações via RSS.

Muitos projetos de Aprendizagem de Máquinas ajustam uma função matemática para um conjunto de dados com o objetivo de calcular: um número como 1 ou 0 (isso é um spam ou não?) para problemas de classificação, ou um conjunto de números (por exemplo, a venda semanal de um produto) para regressão.

Um exemplo é problema de reconhecimento de gênero (masculino ou feminino) de acordo com a voz, mais informações sobre este exemplo podem ser encontrados na página Kaggle. O objetivo com esse conjunto de dados é quando dado um sinal de fala, identificar se é do sexo masculino ou feminino. Esse problema enquadra-se na categoria de um problema de classificação. O objetivo é atribuir a classe masculina ou feminina dado um sinal de fala, mas o problema de classificação não necessariamente tem de estar limitado a essas duas classes. Alguns outros exemplos de problemas de classificação são: a análise de sentimento do texto (positivo, neutro ou negativo), identificação de imagem (que tipo de flor é apresentado em uma imagem), entre outros.

Como poderia o computador aprender a identificar se uma voz gravada é de um homem ou de uma mulher? Bem, se utilizaremos um computador para ajudar com isso, então nesse caso é preciso falar seu idioma: números. No mundo do aprendizado de máquinas, isso significa extrair características dos dados. No projeto disponível no Kaggle, há diversas características extraídas do sinal de fala: frequência média, frequência mediana, desvio padrão de frequência, intervalo interquartil, média de frequência fundamental, entre outros. Em outras palavras, em vez de ter uma série de temporal mostrando o sinal de pressão da voz, são extraídas características desses sinais que podem ajudar a identificar se a voz pertence a um homem ou uma mulher. Esse recurso é chamado de extração de características, que é uma parte crítica da maioria dos processos de aprendizagem de máquinas.

Foram escolhidos duas características desse conjunto de dados: a média da frequência fundamental e o intervalo interquartil, o gráfico a seguir apresenta estas duas características:

Dois grupos distintos de pontos aparecem nesta figura. Sabendo que esse conjunto de dados é composto por sinais de fala masculinos e femininos, é possível que o grupo ou conjunto de pontos com maior média de frequência fundamental (maior inclinação) pertencem ao sexo feminino, então o outro grupo pertence ao sexo masculino. Portanto, uma possível maneira de identificar qual o gênero é agrupando esses dados em dois clusters e atribuir a etiqueta do sexo feminino ao conjunto com a maior média de frequência fundamental e a etiqueta do sexo masculino para o outro cluster. Acontece que alguns algoritmos de Aprendizado de Máquinas fazem exatamente isso. O K-means é um dos algoritmos mais utilizados para executar essa operação, em que "K" no nome do algoritmo é o número de clusters que se deseja identificar (dois no caso atual). Pode-se notar que todos esses algoritmos levam um número inicial de clusters e os dados brutos que se pretende identificar, retornando um rótulo genérico (0 ou 1, por exemplo), anexado a cada ponto (amostra de dados), indicando a qual grupo cada instância pertence. Nesse caso, foi o domínio de conhecimento que atribui significado a esses rótulos.

O K-means pertence a uma classe de algoritmos de Aprendizado de Máquinas chamado Aprendizado Não Supervisionado, em que não se sabe os rótulos de dados previamente. Isso funciona bem nesse caso, pois existem dois clusters claramente diferenciáveis, porém quando há muita sobreposição pode não ser a melhor solução para problemas de classificação. Outra classe de algoritmos de Aprendizado de Máquinas é chamada de Aprendizado Supervisionado, no qual os dados já estão rotulados. Como exemplo, são retirados os dados dos rótulos de reconhecimento de voz e traçada novamente o mesmo gráfico.

A intuição de que o cluster com a maior frequência fundamental pertence às fêmeas estava correto. Para apresentar a abordagem supervisionada, foram separadas as duas classes com uma linha para que visualmente possa fazer sentido para o leitor. Essa linha é chamada de limite de decisão e ao lado está sua equação. Os valores dos "Thetas" são os parâmetros de linha, enquanto que os valores dos "x" correspondem às variáveis plotadas no gráfico: intervalo interquartil e média de frequência fundamental, nesse caso. Assim, é possível aplicar essa linha porque já se sabe o rótulo de dados. Assim, se utilizado o lado esquerdo da equação no dataset de voz e se o número recebido é maior que zero, pode-se prever que a voz é do sexo feminino e se esse número for menor que zero considera-se do sexo masculino.

Foram plotados apenas 100 pontos para cada classe, porém todo o dataset é composto de 3.164 pontos de amostras divididos entre masculino e feminino. O que acontece se forem plotados 200 pontos de amostras para cada classe?

Bem, a linha tracejada em preto parece não separar corretamente os dois conjuntos de dados. O processo é então repetido e aplicada uma linha pontilhada vermelha que visualmente pode ser uma maneira melhor de separar as classes. A diferença matemática entre ambas linhas no gráfico está relacionada aos valores dos "Thetas" da equação. Foi "aprendido" uma melhor maneira de separar ambas as classes, tendo em conta os dados que foram apresentados. O resultado, em essência, se resume em encontrar novos coeficientes para o limite de decisão.

Agora, podemos entender que o "Aprendizado" está relacionado a encontrar os melhores parâmetros para atingir o objetivo, que nesse caso é predizer se o sinal de voz é masculino e feminino. Na realidade, a maioria dos algoritmos de aprendizado de máquinas consistem de encontrar os "Thetas" / coeficientes / parâmetros para seus modelos, de uma forma que melhor se adapte aos dados (como Regressão Logística e Redes Neurais Artificiais). Logicamente esses algoritmos são muitos melhores que o métodos de atribuição visual de uma linha. Eles normalmente são baseados em funções otimizadas que se encaixam em linhas que minimizam o erro entre os valores reais e previstos pelo modelo. Esse erro também é chamado de perda ou função de perda no mundo do Aprendizado de Máquinas.

Existem também alguns algoritmos amplamente utilizados, baseados em coleções de árvores de decisões como Random Forest ou Gradient Tree Boosting que não encontram explicitamente os coeficientes para uma linha, entretanto, encontram outros parâmetros para dividir os dados resultando em um limite de decisão mais complexo. Logo, com a quantidade de amostras utilizadas no exemplo anterior, não há razões para que uma linha seja escolhida como o melhor limite de decisão. Pode-se em teoria, ajustar uma curva para melhor separar os dados.

A linha preta sólida poderia ser escolhida como um limite de decisão, porém é um problema que assombra praticamente todos os Cientistas de Dados, que é o sobreajuste (overfitting). O que a curva faz é criar um limite de decisão que é muito específico para o dataset atual e provavelmente não generalizará bem se mais amostras forem adicionadas, como mostrado no gráfico a seguir:

Todo o conjunto de dados foi plotado e agora o método de separação utilizando linhas torna-se muito questionável. É preciso ajuda de um algoritmo de Aprendizado de Máquinas para escolher uma curva que minimize o erro ou a perda que se está cometendo. Além disso, é preciso ajuda dos algoritmos, porque até o momento foi demonstrada a dependência do dataset de voz com base em apenas duas características, mas cada amostra de voz é composta de 21 características.

Imagine que em vez do gráfico bidimensional mostrado até agora, tivéssemos três dimensões em que a terceira dimensão é outra característica como a frequência fundamental máxima em todo o sinal (vamos chamá-lo de maxfun). Considere o seguinte: vozes femininas tem o maxfun em torno de zero e enquanto que a voz masculina tem o maxfun por volta de um (isso não acontece neste dataset). Se isso fosse representado em um gráfico 3D, facilmente poderia ser visualizado um plano que pode dividir os dados masculinos e femininos de maneira perfeita. Seria ótimo. Quando são adicionados mais recursos para o dataset, pode-se imaginar essa situação acontecendo com planos dimensionais maiores (hiperplanos) que dividirão os dados de forma mais precisa. Esta é a boa notícia.

A má notícia é que não existe uma maneira de verificar visualmente após a terceira dimensão, a menos que se utilize um algoritmo de redução de dimensionalidade, como a Análise de Componentes Principais que transforma esses dados altamente dimensionais em duas ou três dimensões. Mas a desvantagem é que deixará de manter as características físicas nos eixos do gráfico (como a frequência fundamental média ou a frequência fundamental máxima), mas possuem variáveis que são projeções das características mais importantes do seu dataset. Ilustrando esse ponto, foi traçado um exemplo simples com a frequência média e a frequência mediana de fala a partir do dataset de reconhecimento de voz.

O gráfico mostra duas variáveis correlacionadas que fazem sentido, tendo em vista que são exemplos da mesma distribuição de probabilidade de frequência de vozes. Há informações redundantes utilizando essas duas variáveis. Isso deveria ser bom para encontrar uma maneira de simplificar a visualização.

E se em vez de visualizar as duas variáveis, visualizassemos a projeção desses dados em uma direção que minimiza a perda das informações dessas duas variáveis? Isso é feito no eixo "z1", mas ainda há perda de alguma informação. Para este caso em particular, esta direção pode ser vista como uma frequência, mas não é a mediana ou a média. Entretanto, pode-se imaginar aplicando a projeção em um dataset de 21 dimensões em 2. Não se pode realmente saber qual é o significado dessas duas dimensões. Além disso, nesse simples exemplo não foram perdidas muitas informações, mas projetar as 21 características em 2 resultará em uma perda substancial. Isso poderia ser interessante em termos de visualização de dados, mas não deve ser utilizado para executar algoritmos de aprendizado de máquinas.

Foi observado que alguns recursos neste dataset estão correlacionados. Deveriam ser incluídos no projeto de aprendizado de máquinas? De fato, quantos recursos deveriam ser utilizados? Utilizando somente dois recursos e todos os pontos, o limite de decisão não separa claramente as duas classes neste problema. Isso é confirmado quando é calculado o erro ou a perda incorre utilizando a linha como um limite de decisão. Adicionando um terceiro recurso, se o mesmo for adequado a perda tende a ser menor. Se não for, é uma indicação de que este recurso adicional não é adequado ou não é importante para o problema em questão.

Esperamos que este artigo tenha despertado a curiosidade do leitor sobre o Aprendizado de Máquinas. Esta foi uma introdução geral e outras leituras são necessárias para o desenvolvimento e entendimento de um projeto de Aprendizado de Máquinas do seu início ao fim. Existem muitos algoritmos escritos em muitas linguagens de programação. Python e R estão entre as linguagens mais utilizadas para esse trabalho e possuem boas bibliotecas para o Aprendizado de Máquinas como scikit-learn para o primeiro e o caret para o último.

Sobre o autor

Rafael Fernandes é cientista de dados na Black Swan Data. Ele utiliza Aprendizado de Máquinas para ajudar seus clientes com preços e demandas de seus produtos, bem como para revelar suas idéias e o comportamento do consumidor. Em sua experiência anterior, ele simulou a reentrada da cápsula Apollo do espaço em 8 vezes a velocidade do som, mas ainda é um geek aeroespacial.

 

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT