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.