Redução de Dimensionalidade, um exemplo com XGBoost e PCA
A importância da redução de dimensionalidade em conjuntos com muitos atributos
Neste texto, vamos dar continuidade ao tema da Maldição da Dimensionalidade. O caso prático será de classificação de imagens do COCO Dataset. Selecionamos as imagens com os códigos de uma publicação anterior.
O objetivo é dar uma demonstração prática do impacto da redução de dimensionalidade. Nosso conjunto de dados tem 1.267 observações (imagens) e 1.536 atributos (transfer learning).
Caso tenha interesse só nos resultados, pule para a Parte II.
Sumário
Parte I: Definição do conjunto de dados e atributos
- Seleção das imagens do COCO Dataset
- Extração de atributos (Transfer Learning)
Parte II: Resultados do caso prático
- Redução de dimensionalidade com o PCA
- Impactos na classificação utilizando o XGBoost
- Conclusão
Parte I: Definição do conjunto de dados e atributos
Seleção das imagens do COCO Dataset
Vamos selecionar imagens de seis categorias de objetos do COCO Dataset do conjunto de validação de 2014:
- 2 categorias de veículos: carro e bicicleta;
- 2 categorias de animais: cachorro e gato;
- 2 categorias de comidas: bolo e pizza.
Além das categorias, filtramos:
- imagens com apenas um objeto anotado;
- imagens onde o objeto tem uma caixa delimitadora (em inglês, bounding box) que ocupa mais que 40% da imagem.
Após a seleção, o conjunto de dados ficou com 1.267 imagens e 6 categorias.
Para ter detalhes de como selecionar imagens específicas do COCO acesse nosso artigo sobre o pycocotools (clique aqui). Nesse artigo ensinamos como transformar a anotação em um pandas.DataFrame.
Após selecionar as imagens e transformar as informações obtidas em um pandas.DataFrame,df_imgs
, obtivemos a seguinte saída:
A primeira coluna tem os nomes dos arquivos das imagens selecionadas. Essa estrutura é perfeita para a extração de atributos utilizando o flow_from_dataframe
do Keras.
Extração de atributos (Transfer Learning)
A extração de atributos é uma técnica que foi apresentada no artigo Diagnósticos médicos auxiliados por Deep Learning.
Para a extrair os atributos das imagens selecionadas utilizamos a InceptionResNetV2 do Keras Applications, um conjunto de redes neurais pré-treinadas para classificação do conjunto ImageNet.
Nós excluímos a camada de saída (probabilidade de cada um dos 1.000 objetos da ImageNet) e ficamos somente com a saída da última camada oculta, que tem 1.536 neurônios, ou seja, atributos.
Parte II: Resultados do caso prático
Para demonstrar os efeitos da redução de dimensionalidade na qualidade do modelo final vamos utilizar o clássico algoritmo de Análise de Componentes Principais (em inglês, PCA) para reduzir 1.536 dimensões em apenas 15.
Redução de dimensionalidade com o PCA
O PCA é um dos algoritmos mais conhecidos de redução de dimensionalidade e é fácil de encontrar diversos artigos explicando seu funcionamento.
O principal ponto positivo do PCA é a remoção de atributos correlacionados e, conforme apresentamos no artigo sobre a Maldição da Dimensionalidade, isso melhora a qualidade do modelo.
Um ponto negativo sobre o PCA é sua estrutura linear. Sabemos que os dados da vida real nem sempre são lineares ou têm correlações lineares. Contudo, isso não impede que o PCA seja utilizado na prática.
Impactos na classificação utilizando o XGBoost
Depois de padronizar os 1.536 atributos obtidos da InceptionResNetV2, treinamos o XGBoost com e sem redução de dimensionalidade. Os hiperparâmetros foram mantidos com seus valores padrões (default).
O XGBoost, assim como todo GBM é propenso a superajustes (overfitting) nos dados de treino. Isso fica evidente quando aplicamos o XGBoost em dados com muitos atributos.
Na tabela 1 é possível ver o comportamento do XGBoost sem redução de dimensionalidade. Claramente houve overfitting nos dados de treino, pois temos 100% de acurácia. Isso impacta na qualidade do modelo nos dados de teste, onde a acurácia cai para 92% (-8 p.p.).
Na tabela 2, mesmo aplicando o PCA e reduzindo o número de atributos de 1.536 para 15 (~10% do total), ainda observamos o comportamento de overfitting do XGBoost no treino (100% de acurácia). Contudo, com a redução de dimensionalidade, temos um modelo mais robusto atingindo 95% de acurácia nos dados de teste (-5 p.p.).
Conclusão
No exemplo apresentado, temos um conjunto de imagens pequeno relativo ao número de atributos, onde justamente a Maldição da Dimensionalidade é mais forte e ao aplicarmos um simples PCA observamos uma melhora expressiva na qualidade do modelo.
Portanto, se você quiser ter o melhor algoritmo possível, não deixe de testar uma redução de dimensionalidade caso você se depare com um conjunto de dados com muitos atributos.
Agora, imagina se tivéssemos usado um algoritmo não-linear de redução de dimensionalidade? Aguarde os próximos capítulos…
Agradecimentos
Adriano Moala (Revisão)
Comunicação Institucional Porto Seguro (Revisão)
Referências dos nossos artigos: