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

Aplicando PCA e CDA

Image for post
Image for post
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

Image for post
Image for post
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

  • É 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 e outras baseadas em distância serão explicadas em futuros posts.

Experimento Computacional

Image for post
Image for post
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:

Image for post
Image for post

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

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!

Turing Talks

Inteligência Artificial para todos

Sign up for Turing Talks

By Turing Talks

Acompanhe os artigos semanais do Turing Talks! Aprenda de maneira simples como funciona Inteligência Artificial e como criar seus próprios algoritmos. Take a look

By signing up, you will create a Medium account if you don’t already have one. Review our Privacy Policy for more information about our privacy practices.

Check your inbox
Medium sent you an email at to complete your subscription.

Thanks to Bernardo Coutinho and Guilherme Fernandes

Felipe Augusto de Moraes Machado

Written by

Engineering Student

Turing Talks

Inteligência Artificial para todos

Felipe Augusto de Moraes Machado

Written by

Engineering Student

Turing Talks

Inteligência Artificial para todos

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

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