Como fazer a análise de componentes principais (PCA) em Python
Aprenda sobre PCA e como ele pode ser aproveitado para extrair informações dos dados sem nenhuma supervisão usando dois conjuntos de dados populares: Câncer de mama e CIFAR-10.
A análise de componentes principais (PCA) é uma técnica de redução de dimensionalidade linear que pode ser usada para extrair informações de um espaço de alta dimensão, projetando-as em um subespaço de dimensão inferior. Ele tenta preservar as partes essenciais que têm mais variabilidade nos dados e remover as partes não essenciais com menos variabilidade.
As dimensões nada mais são do que recursos que representam os dados. Por exemplo, uma imagem de 28 x 28 tem 784 elementos de imagem (pixels), que são as dimensões ou os recursos que, juntos, representam essa imagem.
Uma coisa importante a ser observada sobre a PCA é que ela é uma técnica de redução de dimensionalidade não supervisionada, você pode agrupar os pontos de dados semelhantes com base na correlação de recursos entre eles sem nenhuma supervisão (ou rótulos), e você aprenderá como fazer isso de forma prática usando Python nas seções posteriores deste tutorial!
De acordo com a Wikipedia, a ACP é um procedimento estatístico que usa uma transformação ortogonal para converter um conjunto de observações de variáveis possivelmente correlacionadas (entidades em que cada uma delas assume vários valores numéricos) em um conjunto de valores de variáveis linearmente não correlacionadas chamadas de componentes principais.
Observação: Features, Dimensions e Variables se referem à mesma coisa. Você verá que eles são usados de forma intercambiável.
Onde você pode aplicar a PCA?
Visualização de dados: Ao trabalhar em qualquer problema relacionado a dados, o desafio no mundo atual é o grande volume de dados e as variáveis/características que definem esses dados. Para resolver um problema em que os dados são a chave, você precisa de uma exploração extensiva dos dados, como descobrir como as variáveis estão correlacionadas ou entender a distribuição de algumas variáveis. Considerando que há um grande número de variáveis ou dimensões ao longo das quais os dados são distribuídos, a visualização pode ser um desafio e quase impossível.
Portanto, a PCA pode fazer isso por você, pois projeta os dados em uma dimensão inferior, permitindo assim que você visualize os dados em um espaço 2D ou 3D a olho nu.
Acelerando um algoritmo de aprendizado de máquina (ML): Como a ideia principal do PCA é a redução da dimensionalidade, você pode aproveitá-la para acelerar o tempo de treinamento e teste do algoritmo de aprendizado de máquina, considerando que seus dados têm muitos recursos e o aprendizado do algoritmo de ML é muito lento.
Em um nível abstrato, você pega um conjunto de dados com muitos recursos e simplifica esse conjunto de dados selecionando alguns Principal Components dos recursos originais.
O que é um componente principal?
Os componentes principais são a chave para a PCA; eles representam o que está por trás dos dados. Em um termo leigo, quando os dados são projetados em uma dimensão mais baixa (suponha três dimensões) a partir de um espaço mais alto, as três dimensões nada mais são do que os três componentes principais que capturam (ou mantêm) a maior parte da variação (informações) dos seus dados.
Os componentes principais têm direção e magnitude. A direção representa em quais eixos principais os dados estão mais espalhados ou têm maior variação e a magnitude significa a quantidade de variação que o componente principal captura dos dados quando projetados nesse eixo. Os componentes principais são uma linha reta, e o primeiro componente principal contém a maior variação nos dados. Cada componente principal subsequente é ortogonal ao anterior e tem uma variação menor. Dessa forma, com um conjunto de x variáveis correlacionadas em y amostras, você obtém um conjunto de u componentes principais não correlacionados nas mesmas y amostras.
O motivo pelo qual você obtém componentes principais não correlacionados a partir dos recursos originais é que os recursos correlacionados contribuem para o mesmo componente principal, reduzindo assim os recursos de dados originais em componentes principais não correlacionados, cada um representando um conjunto diferente de recursos correlacionados com diferentes quantidades de variabilidade. Cada componente principal representa uma porcentagem da variabilidade total capturada dos dados.
No tutorial de hoje, aplicaremos a PCA com o objetivo de obter insights por meio da visualização de dados, e também aplicaremos a PCA com o objetivo de acelerar nosso algoritmo de aprendizado de máquina. Para realizar as duas tarefas acima, você usará dois conjuntos de dados famosos: Câncer de mama e CIFAR - 10. O primeiro é um conjunto de dados numéricos; o segundo é um conjunto de dados de imagens.
Entendendo os dados
Antes de ir em frente e carregar os dados, é bom entender e analisar os dados com os quais você trabalhará!
Câncer de mama
O conjunto de dados de câncer de mama é um dado multivariado de valor real que consiste em duas classes, em que cada classe significa se uma paciente tem ou não câncer de mama. As duas categorias são: maligna e benigna.
A classe maligna tem 212 amostras, enquanto a classe benigna tem 357 amostras.
Ele tem 30 recursos compartilhados em todas as classes: raio, textura, perímetro, área, suavidade, dimensão fractal, etc.
Você pode fazer o download do conjunto de dados de câncer de mama aqui ou, de maneira mais fácil, carregá-lo com a ajuda da biblioteca sklearn.
CIFAR - 10
O conjunto de dados CIFAR-10 (Canadian Institute For Advanced Research) consiste em 60000 imagens, cada uma com 32x32x3 imagens coloridas, com dez classes, com 6000 imagens por categoria.
O conjunto de dados consiste em 50000 imagens de treinamento e 10000 imagens de teste.
As classes do conjunto de dados são: avião, automóvel, pássaro, gato, veado, cachorro, sapo, cavalo, navio, caminhão.
Você pode fazer o download do conjunto de dados do CIFAR aqui ou também pode carregá-lo rapidamente com a ajuda de uma biblioteca de aprendizagem profunda, como Keras.
Exploração de dados usando PCA
Agora você carregará e analisará os conjuntos de dados Breast Cancer e CIFAR-10. A esta altura, você já tem uma ideia da dimensionalidade dos dois conjuntos de dados.
Então, vamos explorar rapidamente os dois conjuntos de dados.
Exploração de dados sobre câncer de mama
Primeiro, vamos explorar o conjunto de dados Breast Cancer.
Você usará o módulo sklearn'sdatasets e importará o conjunto de dados Breast Cancer a partir dele.
from sklearn.datasets import load_breast_cancer
Tecnologia
load_breast_cancer fornecerá a você os rótulos e os dados. Para obter os dados, você chamará .data e, para obter os rótulos, .target.
Os dados têm 569 amostras com trinta recursos, e cada amostra tem um rótulo associado a ela. Há dois rótulos nesse conjunto de dados.
Agora você importará o numpy, pois reformulará o breast_labels para concatená-lo com o breast_data, de modo que possa finalmente criar um DataFrame que terá os dados e os rótulos.
Depois de reshaping os rótulos, você concatenate os dados e os rótulos ao longo do segundo eixo, o que significa que a forma final da matriz será 569 x 31.
Se você observar na matriz features, o campo label está ausente. Portanto, você terá que adicioná-lo manualmente à matriz features, pois estará equiparando essa matriz aos nomes das colunas do seu dataframe breast_dataset.
Como os rótulos originais estão no formato 0,1, você alterará os rótulos para benign e malignant usando a função .replace. Você usará inplace=True que modificará o dataframe breast_dataset.
Depois de importados, você usará o método .load_data() para fazer download dos dados, que serão baixados e armazenados no diretório Keras. Isso pode levar algum tempo, dependendo da velocidade da sua Internet.
Vamos descobrir também o número total de rótulos e os vários tipos de classes que os dados têm.
# Find the unique numbers from the train labels
classes = np.unique(y_train)
nClasses =len(classes)print('Total number of outputs : ', nClasses)print('Output classes : ', classes)Tecnologia
Total number ofoutputs:10
Output classes :[0123456789]Tecnologia
Agora, para plotar as imagens CIFAR-10, você importará matplotlib e também usará um comando magic (%)%matplotlib inline para informar ao notebook jupyter para mostrar a saída dentro do próprio notebook!
import matplotlib.pyplot as plt
%matplotlib inline
Tecnologia
Para que você entenda melhor, vamos criar um dicionário que terá nomes de classes com seus rótulos de classes categóricas correspondentes.
plt.figure(figsize=[5,5])# Display the first image in training data
plt.subplot(121)
curr_img = np.reshape(x_train[0],(32,32,3))
plt.imshow(curr_img)print(plt.title("(Label: "+str(label_dict[y_train[0][0]])+")"))# Display the first image in testing data
plt.subplot(122)
curr_img = np.reshape(x_test[0],(32,32,3))
plt.imshow(curr_img)print(plt.title("(Label: "+str(label_dict[y_test[0][0]])+")"))Tecnologia
Mesmo que as duas imagens acima estejam borradas, você ainda pode observar que a primeira imagem é um sapo com o rótulo frog, enquanto a segunda imagem é de um gato com o rótulo cat.
Visualização de dados usando PCA
Agora vem a parte mais interessante deste tutorial. Como você aprendeu anteriormente que os projetos de PCA transformam dados de alta dimensão em um componente principal de baixa dimensão, agora é hora de visualizar isso com a ajuda do Python!
Visualização dos dados sobre câncer de mama
Você começa pelos Standardizing você começa pelos dados, pois o resultado da PCA é influenciado com base na escala dos recursos dos dados.
É uma prática comum normalizar seus dados antes de alimentá-los com qualquer algoritmo de aprendizado de máquina.
Para aplicar a normalização, você importará o módulo StandardScaler da biblioteca sklearn e selecionará somente os recursos do site breast_dataset que você criou na etapa Exploração de dados. Depois de obter os recursos, você aplicará o dimensionamento fazendo fit_transform nos dados dos recursos.
Ao aplicar o StandardScaler, cada recurso dos seus dados deve ser distribuído normalmente, de modo que você dimensione a distribuição para uma média de zero e um desvio padrão de um.
from sklearn.preprocessing import StandardScaler
x = breast_dataset.loc[:, features].values
x = StandardScaler().fit_transform(x)# normalizing the featuresTecnologia
Agora vem a parte crítica: as próximas linhas de código projetarão os dados tridimensionais do câncer de mama em dados bidimensionais principal components.
Você usará a biblioteca sklearn para importar o módulo PCA e, no método PCA, você passará o número de componentes (n_components=2) e, por fim, chamará fit_transform nos dados agregados. Aqui, vários componentes representam a dimensão inferior na qual você projetará seus dados de dimensão superior.
from sklearn.decomposition import PCA
pca_breast = PCA(n_components=2)
principalComponents_breast = pca_breast.fit_transform(x)Tecnologia
Em seguida, vamos criar um DataFrame que terá os valores dos componentes principais para todas as 569 amostras.
Depois de obter os componentes principais, você pode encontrar o explained_variance_ratio. Ele fornecerá a você a quantidade de informações ou a variação que cada componente principal possui após a projeção dos dados em um subespaço de dimensão inferior.
print('Explained variability per principal component: {}'.format(pca_breast.explained_variance_ratio_))Tecnologia
Explained variability per principal component:[0.442720260.18971182]Tecnologia
Na saída acima, você pode observar que o principal component 1 contém 44,2% das informações, enquanto o principal component 2 contém apenas 19% das informações. Além disso, outro ponto a ser observado é que, ao projetar dados tridimensionais em dados bidimensionais, 36,8% das informações foram perdidas.
Vamos traçar a visualização das 569 amostras ao longo dos eixos principal component - 1 e principal component - 2. Isso deve dar a você uma boa visão de como suas amostras estão distribuídas entre as duas classes.
plt.figure()
plt.figure(figsize=(10,10))
plt.xticks(fontsize=12)
plt.yticks(fontsize=14)
plt.xlabel('Principal Component - 1',fontsize=20)
plt.ylabel('Principal Component - 2',fontsize=20)
plt.title("Principal Component Analysis of Breast Cancer Dataset",fontsize=20)
targets =['Benign','Malignant']
colors =['r','g']for target, color inzip(targets,colors):
indicesToKeep = breast_dataset['label']== target
plt.scatter(principal_breast_Df.loc[indicesToKeep,'principal component 1'], principal_breast_Df.loc[indicesToKeep,'principal component 2'], c = color, s =50)
plt.legend(targets,prop={'size':15})Tecnologia
<matplotlib.legend.Legend at 0x14552a630><Figure size 432x288 with0 Axes>Tecnologia
No gráfico acima, você pode observar que as duas classes benign e malignant, quando projetadas em um espaço bidimensional, podem ser linearmente separáveis até certo ponto. Outras observações podem ser que a classe benign está espalhada em comparação com a classe malignant.
Visualização dos dados do CIFAR - 10
As seguintes linhas de código para visualizar os dados do CIFAR-10 são muito semelhantes à visualização PCA dos dados do câncer de mama.
Vamos verificar rapidamente os valores máximo e mínimo das imagens de treinamento CIFAR-10 e normalize os pixels entre 0 e 1, inclusive.
Perfeito! O tamanho do dataframe está correto, pois há 50.000 imagens de treinamento, cada uma com 3.072 pixels e uma coluna adicional para rótulos, totalizando 3.073.
A PCA será aplicada em todas as colunas, exceto na última, que é o rótulo de cada imagem.
Em seguida, você criará o método PCA, passará o número de componentes como dois e aplicará fit_transform nos dados de treinamento, o que pode levar alguns segundos, pois há 50.000 amostras
Vamos descobrir rapidamente a quantidade de informações ou variance os componentes principais que você possui.
print('Explained variability per principal component: {}'.format(pca_cifar.explained_variance_ratio_))Tecnologia
Explained variability per principal component:[0.29076630.11253144]Tecnologia
Bem, parece que uma quantidade razoável de informações foi retida pelos componentes principais 1 e 2, já que os dados foram projetados de 3.072 dimensões para apenas dois componentes principais.
É hora de visualizar os dados do CIFAR-10 em um espaço bidimensional. Lembre-se de que há alguma sobreposição de classe semântica nesse conjunto de dados, o que significa que um sapo pode ter uma forma ligeiramente semelhante à de um gato ou de um cervo com um cachorro, especialmente quando projetado em um espaço bidimensional. As diferenças entre eles podem não ser capturadas tão bem.
<matplotlib.axes._subplots.AxesSubplot at 0x12a5ba8d0>Tecnologia
Na figura acima, você pode observar que alguma variação foi capturada pelos componentes principais, pois há alguma estrutura nos pontos quando projetados ao longo dos dois eixos de componentes principais. Os pontos que pertencem à mesma classe estão próximos uns dos outros, e os pontos ou imagens que são muito diferentes semanticamente estão mais distantes uns dos outros.
Acelerar o treinamento de aprendizagem profunda usando PCA
Neste segmento final do tutorial, você aprenderá como acelerar o processo de treinamento do seu modelo de aprendizagem profunda usando PCA.
Observação: Para aprender as terminologias básicas que serão usadas nesta seção, consulte este tutorial.
Primeiro, vamos normalizar as imagens de treinamento e teste. Se você se lembrar, as imagens de treinamento foram normalizadas na parte de visualização do PCA, portanto, você só precisa normalizar as imagens de teste. Então, vamos fazer isso rapidamente!
Em seguida, você criará a instância do modelo PCA.
Aqui, você também pode passar a quantidade de variação que deseja que a PCA capture. Vamos passar 0,9 como um parâmetro para o modelo PCA, o que significa que o PCA reterá 90% da variação e o number of components necessário para capturar 90% da variação será usado.
Observe que, anteriormente, você passou o endereço n_components como parâmetro e pôde descobrir a variação capturada por esses dois componentes. Mas aqui mencionamos explicitamente a variação que gostaríamos que o PCA capturasse e, portanto, o n_components variará com base no parâmetro de variação.
Se você não passar nenhuma variância, o número de componentes será igual à dimensão original dos dados.
Na saída acima, você pode observar que, para obter 90% de variação, a dimensão foi reduzida para 99 componentes principais das 3072 dimensões reais.
Por fim, você aplicará o transform no conjunto de treinamento e teste para gerar um conjunto de dados transformado a partir dos parâmetros gerados pelo método fit.
Na saída acima, você pode observar que o tempo necessário para treinar cada época foi de apenas 7 seconds em uma CPU. O modelo fez um trabalho decente nos dados de treinamento, alcançando uma precisão de 70%, enquanto obteve apenas uma precisão de 56% nos dados de teste. Isso significa que você ajustou demais os dados de treinamento. No entanto, lembre-se de que os dados foram projetados em 99 dimensões a partir de 3.072 dimensões e, apesar disso, ele fez um ótimo trabalho!
Por fim, vamos ver quanto tempo o modelo leva para ser treinado no conjunto de dados original e quanta precisão ele pode alcançar usando o mesmo modelo de aprendizagem profunda.
Voila! A partir do resultado acima, fica evidente que o tempo necessário para treinar cada época foi de cerca de 23 seconds em uma CPU, o que foi quase três vezes mais do que o modelo treinado na saída do PCA.
Além disso, tanto a precisão do treinamento quanto do teste é menor do que a precisão que você obteve com os 99 componentes principais como entrada para o modelo.
Portanto, ao aplicar o PCA nos dados de treinamento, você conseguiu treinar seu algoritmo de aprendizagem profunda não apenas fast, mas também obteve um melhor accuracy nos dados de teste quando comparado com o algoritmo de aprendizagem profunda treinado com os dados de treinamento originais.
Vá além!
Parabéns por você ter concluído o tutorial.
Esse tutorial foi uma introdução excelente e abrangente ao PCA em Python, que cobriu tanto os conceitos teóricos quanto os práticos do PCA.
Se você quiser se aprofundar nas técnicas de redução de dimensionalidade, considere ler sobre o t-distributed Stochastic Neighbor Embedding, comumente conhecido como tSNE, que é uma técnica de redução de dimensionalidade probabilística não linear.
Qual é a diferença entre a análise de fatores e a análise de componentes principais?⌄
A análise de fatores (FA) e a análise de componentes principais (PCA) são técnicas usadas para reduzir a dimensionalidade, mas têm objetivos diferentes. A ACP concentra-se em preservar a variabilidade total dos dados, transformando-os em um novo conjunto de variáveis não correlacionadas (componentes principais), ordenadas pela quantidade de variação que explicam. Em contrapartida, a AF visa identificar as relações subjacentes entre as variáveis observadas, modelando os dados com alguns fatores latentes que explicam as correlações entre as variáveis.
Neste tutorial, você aprenderá a usar o R PCA (Principal Component Analysis) para extrair dados com muitas variáveis e criar visualizações para exibir esses dados.
Mergulhe na ciência de dados com Python para analisar e visualizar seus dados de forma eficaz. Não precisa ter experiência ou conhecimento em programação.
A análise de componentes principais (PCA) é uma técnica de redução de dimensionalidade linear que pode ser usada para extrair informações de um espaço de alta dimensão, projetando-as em um subespaço de dimensão inferior. Ele tenta preservar as partes essenciais que têm mais variabilidade nos dados e remover as partes não essenciais com menos variabilidade.
As dimensões nada mais são do que recursos que representam os dados. Por exemplo, uma imagem de 28 x 28 tem 784 elementos de imagem (pixels), que são as dimensões ou os recursos que, juntos, representam essa imagem.
Uma coisa importante a ser observada sobre a PCA é que ela é uma técnica de redução de dimensionalidade não supervisionada, você pode agrupar os pontos de dados semelhantes com base na correlação de recursos entre eles sem nenhuma supervisão (ou rótulos), e você aprenderá como fazer isso de forma prática usando Python nas seções posteriores deste tutorial!
De acordo com a Wikipedia, a ACP é um procedimento estatístico que usa uma transformação ortogonal para converter um conjunto de observações de variáveis possivelmente correlacionadas (entidades em que cada uma delas assume vários valores numéricos) em um conjunto de valores de variáveis linearmente não correlacionadas chamadas de componentes principais.
Observação: Features, Dimensions e Variables se referem à mesma coisa. Você verá que eles são usados de forma intercambiável.
Onde você pode aplicar a PCA?
Visualização de dados: Ao trabalhar em qualquer problema relacionado a dados, o desafio no mundo atual é o grande volume de dados e as variáveis/características que definem esses dados. Para resolver um problema em que os dados são a chave, você precisa de uma exploração extensiva dos dados, como descobrir como as variáveis estão correlacionadas ou entender a distribuição de algumas variáveis. Considerando que há um grande número de variáveis ou dimensões ao longo das quais os dados são distribuídos, a visualização pode ser um desafio e quase impossível.
Portanto, a PCA pode fazer isso por você, pois projeta os dados em uma dimensão inferior, permitindo assim que você visualize os dados em um espaço 2D ou 3D a olho nu.
Acelerando um algoritmo de aprendizado de máquina (ML): Como a ideia principal do PCA é a redução da dimensionalidade, você pode aproveitá-la para acelerar o tempo de treinamento e teste do algoritmo de aprendizado de máquina, considerando que seus dados têm muitos recursos e o aprendizado do algoritmo de ML é muito lento.
Em um nível abstrato, você pega um conjunto de dados com muitos recursos e simplifica esse conjunto de dados selecionando alguns
Principal Componentsdos recursos originais.O que é um componente principal?
Os componentes principais são a chave para a PCA; eles representam o que está por trás dos dados. Em um termo leigo, quando os dados são projetados em uma dimensão mais baixa (suponha três dimensões) a partir de um espaço mais alto, as três dimensões nada mais são do que os três componentes principais que capturam (ou mantêm) a maior parte da variação (informações) dos seus dados.
Os componentes principais têm direção e magnitude. A direção representa em quais eixos principais os dados estão mais espalhados ou têm maior variação e a magnitude significa a quantidade de variação que o componente principal captura dos dados quando projetados nesse eixo. Os componentes principais são uma linha reta, e o primeiro componente principal contém a maior variação nos dados. Cada componente principal subsequente é ortogonal ao anterior e tem uma variação menor. Dessa forma, com um conjunto de x variáveis correlacionadas em y amostras, você obtém um conjunto de u componentes principais não correlacionados nas mesmas y amostras.
O motivo pelo qual você obtém componentes principais não correlacionados a partir dos recursos originais é que os recursos correlacionados contribuem para o mesmo componente principal, reduzindo assim os recursos de dados originais em componentes principais não correlacionados, cada um representando um conjunto diferente de recursos correlacionados com diferentes quantidades de variabilidade. Cada componente principal representa uma porcentagem da variabilidade total capturada dos dados.
No tutorial de hoje, aplicaremos a PCA com o objetivo de obter insights por meio da visualização de dados, e também aplicaremos a PCA com o objetivo de acelerar nosso algoritmo de aprendizado de máquina. Para realizar as duas tarefas acima, você usará dois conjuntos de dados famosos: Câncer de mama e CIFAR - 10. O primeiro é um conjunto de dados numéricos; o segundo é um conjunto de dados de imagens.
Entendendo os dados
Antes de ir em frente e carregar os dados, é bom entender e analisar os dados com os quais você trabalhará!
Câncer de mama
O conjunto de dados de câncer de mama é um dado multivariado de valor real que consiste em duas classes, em que cada classe significa se uma paciente tem ou não câncer de mama. As duas categorias são: maligna e benigna.
A classe maligna tem 212 amostras, enquanto a classe benigna tem 357 amostras.
Ele tem 30 recursos compartilhados em todas as classes: raio, textura, perímetro, área, suavidade, dimensão fractal, etc.
Você pode fazer o download do conjunto de dados de câncer de mama aqui ou, de maneira mais fácil, carregá-lo com a ajuda da biblioteca
sklearn.CIFAR - 10
O conjunto de dados CIFAR-10 (Canadian Institute For Advanced Research) consiste em 60000 imagens, cada uma com 32x32x3 imagens coloridas, com dez classes, com 6000 imagens por categoria.
O conjunto de dados consiste em 50000 imagens de treinamento e 10000 imagens de teste.
As classes do conjunto de dados são: avião, automóvel, pássaro, gato, veado, cachorro, sapo, cavalo, navio, caminhão.
Você pode fazer o download do conjunto de dados do CIFAR aqui ou também pode carregá-lo rapidamente com a ajuda de uma biblioteca de aprendizagem profunda, como
Keras.Exploração de dados usando PCA
Agora você carregará e analisará os conjuntos de dados
Breast CancereCIFAR-10. A esta altura, você já tem uma ideia da dimensionalidade dos dois conjuntos de dados.Então, vamos explorar rapidamente os dois conjuntos de dados.
Exploração de dados sobre câncer de mama
Primeiro, vamos explorar o conjunto de dados
Breast Cancer.Você usará o módulo
sklearn'sdatasetse importará o conjunto de dadosBreast Cancera partir dele.load_breast_cancerfornecerá a você os rótulos e os dados. Para obter os dados, você chamará.datae, para obter os rótulos,.target.Os dados têm 569 amostras com trinta recursos, e cada amostra tem um rótulo associado a ela. Há dois rótulos nesse conjunto de dados.
Vamos verificar a forma dos dados.
Embora para este tutorial você não precise dos rótulos, para entender melhor, vamos carregar os rótulos e verificar a forma.
Agora você importará o
numpy, pois reformulará obreast_labelspara concatená-lo com obreast_data, de modo que possa finalmente criar umDataFrameque terá os dados e os rótulos.Depois de
reshapingos rótulos, vocêconcatenateos dados e os rótulos ao longo do segundo eixo, o que significa que a forma final da matriz será569 x 31.Agora você importará
pandaspara criar oDataFramedos dados finais para representar os dados de forma tabular.Vamos imprimir rapidamente os recursos que existem no conjunto de dados de câncer de mama!
Se você observar na matriz
features, o campolabelestá ausente. Portanto, você terá que adicioná-lo manualmente à matrizfeatures, pois estará equiparando essa matriz aos nomes das colunas do seu dataframebreast_dataset.Ótimo! Agora você incorporará os nomes das colunas ao quadro de dados
breast_dataset.Vamos imprimir as primeiras linhas do dataframe.
5 linhas × 31 colunas
Como os rótulos originais estão no formato
0,1, você alterará os rótulos parabenignemalignantusando a função.replace. Você usaráinplace=Trueque modificará o dataframebreast_dataset.Vamos imprimir as últimas linhas do site
breast_dataset.5 linhas × 31 colunas
CIFAR - 10 exploração de dados
Em seguida, você explorará o conjunto de dados de imagens
CIFAR - 10Você pode carregar o conjunto de dados
CIFAR - 10usando uma biblioteca de aprendizagem profunda chamadaKeras.Depois de importados, você usará o método
.load_data()para fazer download dos dados, que serão baixados e armazenados no diretórioKeras. Isso pode levar algum tempo, dependendo da velocidade da sua Internet.A linha de código acima retorna imagens de treinamento e teste junto com os rótulos.
Vamos imprimir rapidamente a forma das imagens de treinamento e teste.
Vamos também imprimir o formato das etiquetas.
Vamos descobrir também o número total de rótulos e os vários tipos de classes que os dados têm.
Agora, para plotar as imagens
CIFAR-10, você importarámatplotlibe também usará um comandomagic (%)%matplotlib inlinepara informar ao notebook jupyter para mostrar a saída dentro do próprio notebook!Para que você entenda melhor, vamos criar um dicionário que terá nomes de classes com seus rótulos de classes categóricas correspondentes.
Mesmo que as duas imagens acima estejam borradas, você ainda pode observar que a primeira imagem é um sapo com o rótulo
frog, enquanto a segunda imagem é de um gato com o rótulocat.Visualização de dados usando PCA
Agora vem a parte mais interessante deste tutorial. Como você aprendeu anteriormente que os projetos de PCA transformam dados de alta dimensão em um componente principal de baixa dimensão, agora é hora de visualizar isso com a ajuda do Python!
Visualização dos dados sobre câncer de mama
Você começa pelos
Standardizingvocê começa pelos dados, pois o resultado da PCA é influenciado com base na escala dos recursos dos dados.É uma prática comum normalizar seus dados antes de alimentá-los com qualquer algoritmo de aprendizado de máquina.
Para aplicar a normalização, você importará o módulo
StandardScalerda biblioteca sklearn e selecionará somente os recursos do sitebreast_datasetque você criou na etapa Exploração de dados. Depois de obter os recursos, você aplicará o dimensionamento fazendofit_transformnos dados dos recursos.Ao aplicar o StandardScaler, cada recurso dos seus dados deve ser distribuído normalmente, de modo que você dimensione a distribuição para uma média de zero e um desvio padrão de um.
Vamos verificar se os dados normalizados têm uma média de zero e um desvio padrão de um.
Vamos converter os recursos normalizados em um formato tabular com a ajuda do DataFrame.
5 linhas × 30 colunas
Agora vem a parte crítica: as próximas linhas de código projetarão os dados tridimensionais do câncer de mama em dados bidimensionais
principal components.Você usará a biblioteca sklearn para importar o módulo
PCAe, no método PCA, você passará o número de componentes (n_components=2) e, por fim, chamará fit_transform nos dados agregados. Aqui, vários componentes representam a dimensão inferior na qual você projetará seus dados de dimensão superior.Em seguida, vamos criar um DataFrame que terá os valores dos componentes principais para todas as 569 amostras.
explained_variance_ratio. Ele fornecerá a você a quantidade de informações ou a variação que cada componente principal possui após a projeção dos dados em um subespaço de dimensão inferior.Na saída acima, você pode observar que o
principal component 1contém 44,2% das informações, enquanto oprincipal component 2contém apenas 19% das informações. Além disso, outro ponto a ser observado é que, ao projetar dados tridimensionais em dados bidimensionais, 36,8% das informações foram perdidas.Vamos traçar a visualização das 569 amostras ao longo dos eixos
principal component - 1eprincipal component - 2. Isso deve dar a você uma boa visão de como suas amostras estão distribuídas entre as duas classes.No gráfico acima, você pode observar que as duas classes
benignemalignant, quando projetadas em um espaço bidimensional, podem ser linearmente separáveis até certo ponto. Outras observações podem ser que a classebenignestá espalhada em comparação com a classemalignant.Visualização dos dados do CIFAR - 10
As seguintes linhas de código para visualizar os dados do CIFAR-10 são muito semelhantes à visualização PCA dos dados do câncer de mama.
normalizeos pixels entre 0 e 1, inclusive.Em seguida, você criará um DataFrame que conterá os valores de pixel das imagens junto com seus respectivos rótulos em um formato de linha-coluna.
Mas antes disso, vamos remodelar as dimensões da imagem de três para uma (achatar as imagens).
Perfeito! O tamanho do dataframe está correto, pois há 50.000 imagens de treinamento, cada uma com 3.072 pixels e uma coluna adicional para rótulos, totalizando 3.073.
A PCA será aplicada em todas as colunas, exceto na última, que é o rótulo de cada imagem.
5 linhas × 3073 colunas
fit_transformnos dados de treinamento, o que pode levar alguns segundos, pois há 50.000 amostrasEm seguida, você converterá os componentes principais de cada uma das 50.000 imagens de uma matriz numpy para um DataFrame do pandas.
varianceos componentes principais que você possui.Bem, parece que uma quantidade razoável de informações foi retida pelos componentes principais 1 e 2, já que os dados foram projetados de 3.072 dimensões para apenas dois componentes principais.
É hora de visualizar os dados do CIFAR-10 em um espaço bidimensional. Lembre-se de que há alguma sobreposição de classe semântica nesse conjunto de dados, o que significa que um sapo pode ter uma forma ligeiramente semelhante à de um gato ou de um cervo com um cachorro, especialmente quando projetado em um espaço bidimensional. As diferenças entre eles podem não ser capturadas tão bem.
Na figura acima, você pode observar que alguma variação foi capturada pelos componentes principais, pois há alguma estrutura nos pontos quando projetados ao longo dos dois eixos de componentes principais. Os pontos que pertencem à mesma classe estão próximos uns dos outros, e os pontos ou imagens que são muito diferentes semanticamente estão mais distantes uns dos outros.
Acelerar o treinamento de aprendizagem profunda usando PCA
Neste segmento final do tutorial, você aprenderá como acelerar o processo de treinamento do seu modelo de aprendizagem profunda usando PCA.
Observação: Para aprender as terminologias básicas que serão usadas nesta seção, consulte este tutorial.
Primeiro, vamos normalizar as imagens de treinamento e teste. Se você se lembrar, as imagens de treinamento foram normalizadas na parte de visualização do PCA, portanto, você só precisa normalizar as imagens de teste. Então, vamos fazer isso rapidamente!
Vamos acessar
reshapeos dados de teste.Em seguida, você criará a instância do modelo PCA.
Aqui, você também pode passar a quantidade de variação que deseja que a PCA capture. Vamos passar 0,9 como um parâmetro para o modelo PCA, o que significa que o PCA reterá 90% da variação e o
number of componentsnecessário para capturar 90% da variação será usado.Observe que, anteriormente, você passou o endereço
n_componentscomo parâmetro e pôde descobrir a variação capturada por esses dois componentes. Mas aqui mencionamos explicitamente a variação que gostaríamos que o PCA capturasse e, portanto, on_componentsvariará com base no parâmetro de variação.Se você não passar nenhuma variância, o número de componentes será igual à dimensão original dos dados.
Em seguida, você ajustará a instância
PCAnas imagens de treinamento.Agora vamos descobrir quantos
n_componentsPCA usou para capturar a variação de 0,9.Na saída acima, você pode observar que, para obter 90% de variação, a dimensão foi reduzida para
99componentes principais das3072dimensões reais.Por fim, você aplicará o
transformno conjunto de treinamento e teste para gerar um conjunto de dados transformado a partir dos parâmetros gerados pelo métodofit.Em seguida, vamos importar rapidamente as bibliotecas necessárias para executar o modelo de aprendizagem profunda.
Agora, você converterá seus rótulos de treinamento e teste em um vetor de codificação de um único disparo.
Vamos definir o número de épocas, o número de classes e o tamanho do lote para seu modelo.
Em seguida, você definirá seu modelo
Sequential!Vamos imprimir o resumo do modelo.
Finalmente, é hora de compilar e treinar o modelo!
Na saída acima, você pode observar que o tempo necessário para treinar cada época foi de apenas
7 secondsem uma CPU. O modelo fez um trabalho decente nos dados de treinamento, alcançando uma precisão de70%, enquanto obteve apenas uma precisão de56%nos dados de teste. Isso significa que você ajustou demais os dados de treinamento. No entanto, lembre-se de que os dados foram projetados em 99 dimensões a partir de 3.072 dimensões e, apesar disso, ele fez um ótimo trabalho!Por fim, vamos ver quanto tempo o modelo leva para ser treinado no conjunto de dados original e quanta precisão ele pode alcançar usando o mesmo modelo de aprendizagem profunda.
Voila! A partir do resultado acima, fica evidente que o tempo necessário para treinar cada época foi de cerca de
23 secondsem uma CPU, o que foi quase três vezes mais do que o modelo treinado na saída do PCA.Além disso, tanto a precisão do treinamento quanto do teste é menor do que a precisão que você obteve com os 99 componentes principais como entrada para o modelo.
Portanto, ao aplicar o PCA nos dados de treinamento, você conseguiu treinar seu algoritmo de aprendizagem profunda não apenas
fast, mas também obteve um melhoraccuracynos dados de teste quando comparado com o algoritmo de aprendizagem profunda treinado com os dados de treinamento originais.Vá além!
Parabéns por você ter concluído o tutorial.
Esse tutorial foi uma introdução excelente e abrangente ao PCA em Python, que cobriu tanto os conceitos teóricos quanto os práticos do PCA.
Se você quiser se aprofundar nas técnicas de redução de dimensionalidade, considere ler sobre o t-distributed Stochastic Neighbor Embedding, comumente conhecido como tSNE, que é uma técnica de redução de dimensionalidade probabilística não linear.
Se você quiser saber mais sobre técnicas de aprendizagem não supervisionada, como PCA, faça o curso Aprendizagem não supervisionada em Python do DataCamp.
Referências para você aprender mais: