Redução de Dimensionalidade por Projeção Aleatória

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, exploraremos a projeção aleatória na redução de dimensionalidade utilizando a biblioteca scikit-learn. A projeção aleatória é uma técnica que pode ser usada para reduzir a dimensionalidade dos dados, preservando as distâncias de pares entre as amostras. Isso pode ser útil para acelerar cálculos e reduzir o uso de memória em algoritmos de aprendizado de máquina.

Dicas da Máquina Virtual

Após o término da inicialização da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para você.

Importar as bibliotecas necessárias

Vamos começar importando as bibliotecas necessárias para este laboratório.

import numpy as np
from sklearn import random_projection

Gerar dados aleatórios

Em seguida, vamos gerar alguns dados aleatórios que podemos usar para redução de dimensionalidade.

X = np.random.rand(100, 10000)

Aqui, geramos um array 2D X com 100 amostras e 10.000 características. Este será o nosso dado original de alta dimensionalidade.

Projeção aleatória gaussiana

Agora, vamos aplicar a projeção aleatória gaussiana para reduzir a dimensionalidade dos nossos dados.

transformer = random_projection.GaussianRandomProjection()
X_new = transformer.fit_transform(X)

Nesta etapa, criamos uma instância da classe GaussianRandomProjection e a ajustamos aos nossos dados X. Em seguida, aplicamos a transformação chamando o método fit_transform. O resultado é armazenado na variável X_new.

Projeção aleatória esparsa

Em seguida, vamos experimentar outro tipo de projeção aleatória chamada projeção aleatória esparsa.

transformer = random_projection.SparseRandomProjection()
X_new = transformer.fit_transform(X)

Aqui, criamos uma instância da classe SparseRandomProjection e a aplicamos aos nossos dados X usando o método fit_transform. O resultado é armazenado na variável X_new.

Transformação inversa

Os transformadores de projeção aleatória têm a opção de calcular a inversa da matriz de projeção. Vamos explorar este recurso aplicando a transformação inversa aos nossos dados projetados.

transformer = random_projection.SparseRandomProjection(compute_inverse_components=True)
X_new = transformer.fit_transform(X)

## Calcular a transformação inversa
X_new_inversed = transformer.inverse_transform(X_new)

Nesta etapa, criamos uma instância da classe SparseRandomProjection com o parâmetro compute_inverse_components definido como True. Em seguida, ajustamos o transformador aos nossos dados X e aplicamos a transformação. Finalmente, calculamos a transformação inversa chamando o método inverse_transform nos dados projetados X_new.

Verificação

Para verificar a correção da transformação inversa, podemos comparar os dados originais X com o resultado da transformação inversa.

X_new_again = transformer.transform(X_new_inversed)
np.allclose(X_new, X_new_again)

Aqui, aplicamos a transformação aos dados transformados inversamente X_new_inversed e verificamos se é igual aos dados projetados originais X_new usando a função np.allclose.

Resumo

Neste laboratório, aprendemos como realizar projeção aleatória para redução de dimensionalidade utilizando a biblioteca scikit-learn. Exploramos as técnicas de projeção aleatória gaussiana e projeção aleatória esparsa. Também aprendemos como calcular a transformação inversa dos dados projetados para recuperar os dados originais. A projeção aleatória pode ser uma ferramenta útil para reduzir a dimensionalidade de dados de alta dimensionalidade em tarefas de aprendizado de máquina.