Aprendizado Não Supervisionado | Redução de Dimensionalidade

Aplicando PCA e CDA

Felipe Augusto de Moraes Machado
Turing Talks
4 min readMar 1, 2020

--

Aplicação de PCA nos dados Iris — Extraído de <http://www.sthda.com/english/articles/31-principal-component-methods-in-r-practical-guide/112-pca-principal-component-analysis-essentials/>

Hoje abordaremos com um experimento uma importante área da Aprendizagem Não-supervisionada: Redução de Dimensionalidade. Aplicaremos duas técnicas distintas, uma linear e outra não linear, em um problema para tentar transformar 4096 variáveis em… apenas uma! Parece desafiador, não? Antes de começarmos a nossa experiência, talvez o leitor esteja com uma dúvida: por que reduzir a dimensão dos nossos dados?

Maldição da Dimensionalidade

Photo de Mathew MacQuarrie em Unsplash

A Maldição da Dimensionalidade é um fenômeno que aparece quando temos uma quantidade de variáveis bem grande em um problema: às vezes, possuímos muitas variáveis altamente correlacionadas, ou seja, elas são redundantes; ou podemos ter variáveis que não apresentam informação útil ao problema. Isso faz com que o modelo selecionado possua muitos parâmetros, o que pode causar overfitting. Então, para evitar isso, utilizamos técnicas de Redução de Dimensionalidade.

Principal Components Analysis — PCA

Talvez a técnica mais conhecida de de Redução de Dimensionalidade seja o PCA. Sua popularidade é dada por dois motivos:

  • É uma técnica não paramétrica, ou seja, não possui parâmetros
  • É linear, simples e rápida

O PCA é baseado na variância dos dados, ou seja, ele tenta criar uma nova representação dos dados, com uma dimensão menor, mantendo a variância entre eles. Seus novos eixos são descorrelacionados (ou seja, a esperança do produtos deles é nula). Cada eixo possui uma variância, normalmente dada em % em relação ao todo. Na imagem do início desse post, há um gráfico com cujos eixos são os dois primeiros Componentes Principais com um total de 73% + 22.9% = 95.9% da variância total. Note que os dados do Iris (banco de dados utilizado na imagem do início)possui 4 dimensões, porém o PCA consegue manter 96% de variância com apenas 2 novos eixos. Praticamente uma redução de 50% das variáveis!

Não é difícil implementar essa técnica, esse tutorial ensina passo a passo. A biblioteca Sklearn já possui uma classe de PCA implementada. Futuramente, iremos preparar uma aula só para explicar o PCA, visto que ele possui uma grande importância nessa área, além de muitos outros algoritmos derivarem dele.

Curvilinear Distance Analysis — CDA

Essa técnica é pouco conhecida, porém é uma das técnicas mais poderosas de Redução de Dimensionalidade por ser uma técnica não linear. Ela é bem complicada de implementar e possui um custo computacional bem elevado comparado ao PCA, pois é baseado em distância de grafos. Para a sua implementação, esse artigo contém sua formulação matemática. Esse algoritmo requer alguns parâmetros, incluindo a nova dimensão dos dados.

Essa técnica e outras baseadas em distância serão explicadas em futuros posts.

Experimento Computacional

Logo do Grupo Turing

Para aplicar essas técnicas e comparar seus resultados, vamos fazer um experimento. Primeiro, pegamos o logo do Grupo Turing. Deixamos a imagem em Grayscale e reduzimos seu tamanho de 960x960 para 64x64. Depois, pegamos essa imagem e rotacionamos ela de 0º até 360º, 0.5º de cada vez, salvando a imagem rotacionada em um vetor de 4096 (64x64) variáveis. Obtemos assim uma tabela de 720 linhas e 4096 colunas.

O código da função que rotaciona as imagens está abaixo, foi utilizado a biblioteca OpenCV (cv2 no Python) para manipulação das imagens:

Código para Rotacionar a Imagem
Código aplicando em nas imagens rotacionadas PCA

Temos então 720 dados de dimensão igual a 4096. Embora nosso problema tenha uma dimensão alta, só variamos o angulo entre as imagens. Será que conseguimos transformar esses dados para uma única dimensão? Parece impossível! Aplicando PCA, conseguimos reduzir de 4096 para 136 variáveis (com 99% da variância). Uma redução de 96.7% de variáveis! Porém, ainda não conseguimos chegar a uma única dimensão.

Utilizamos CDA para tentar transformar essas 136 variáveis obtidas pelo PCA em apenas 1. O algoritmo convergiu em 14 iterações, formando uma base de 720 dados de uma única dimensão. Em seguida, foram pegos 6 pontos dessa nova base, deixamos em ordem crescente e selecionamos as suas respectivas imagens para fazer o gráfico abaixo:

Podemos ver que, com essa única variável, somos capazes de achar a rotação da imagem! Conseguimos, então, transformar dados de dimensão igual a 4096 para uma única dimensão!

Conclusão

Nesse post introdutório, vimos uma aplicação de duas técnicas de redução de dimensionalidade: PCA, linear e simples; CDA, não linear e complexo. Conseguimos transformar 4096 variáveis em apenas uma. Mas como saberemos, em outros problemas, até quantas variáveis podemos reduzir? Como saber qual técnica vai performar melhor em cada problema? Como quantizar o erro de cada modelo? Muitas perguntas difíceis, mas não se assustem: apresentaremos a vocês em outros posts como responder tudo isso. Então não perca as próximas semanas, teremos uma boa quantidade de algoritmos dessa área para mostrar.

Gostou do texto? Que tal continuar aprendendo semanalmente sobre inteligência artificial? Basta seguir o Grupo Turing em uma das redes: Facebook, LinkedIn ou Instagram. Agradecemos seu engajamento com nossa publicação e até uma próxima!

--

--