Análise de Componentes Principais (PCA) no R

Estava fazendo um curso de machine learning, quando reparei que as minhas notas com o código R para rodar PCA, estavam até que bem didáticas. Ainda não falei do conteúdo aqui no site, mas acho que compartilhar esse código já deve ajudar algumas pessoas. Então, embora eu ainda não tenha nada anotado com relação a teoria, vou deixar isso aqui para quem já sabe o conceito e quer aplicar no R.

# Carrega pacote Caret para funcoes de modelagem
# Carrega pacote AppliedPredictiveModeling por causa da base
library(caret)
library(AppliedPredictiveModeling)

# Separa a base inicial em treino e teste (75-25)
set.seed(3433);
indice.amostra = createDataPartition(base$variavel.resposta, p = 3/4)[[1]]
treino = base[ indice.amostra,]
teste = base[-indice.amostra,]

# cria a funcao que faz a transformacao em pca na base treino (sem a variavel resposta)
# encontrando os principal components que respondem por 0.8 da variancia
# estamos supondo que a coluna 10 eh a da variavel resposta
preProc = preProcess(treino[ , -10],method="pca",thres=.8)

# Veja o resultado
preProc

# Agora, aplica a funcao na base treino sem a variavel resposta
treino.PC = predict(preProc,treino[,-10])
modelo = train(x=treino.PC, y=treino$diagnosis, method = "glm")

# Agora, primeiro aplicamos na base teste,
# a transformacao que fizemos no treino
teste.PC = predict(preProc, treste[,-10])

# agora, vejamos qual a acuracia do nosso modelo
# predict() serve para aplicar a funcao na base declarada
# ou seja, estamos aplicando o modelo na base teste
confusionMatrix(teste$diagnosis,predict(modelo,teste.PC))

# EXTRA: caso voce nao saiba a posicao da sua variavel resposta
# voce pode usar o codigo abaixo, substituindo o campo
# variavel_resposta pelo nome da sua variavel. Lembrando
# que o R eh case sensitive
treino[ , -which(names(treino) %in% c("variavel_resposta"))

2 comentários em “Análise de Componentes Principais (PCA) no R”

    1. Olá, Matheus! Não tem base nesse exemplo. Eu fiz ele de forma genérica, para vc tentar aplicar no seu problema. Ali, vc pode só substituir ‘base’ pelo seu dataframe e ‘variavel.resposta’ o target no seu problema. O resultado final do script é uma matriz de classificação de um problema de classificação. Se vc já tiver um dataset e não estiver conseguindo resolver, manda uma DM no Twitter com o print do erro que eu te ajudo. Forte abraço!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *