PCA e florestas aleatórias

12

Para uma competição recente do Kaggle, eu (manualmente) defini 10 recursos adicionais para o meu conjunto de treinamento, que seriam usados ​​para treinar um classificador de florestas aleatórias. Decidi executar o PCA no conjunto de dados com os novos recursos, para ver como eles se comparavam. Eu descobri que ~ 98% da variação foi realizada pelo primeiro componente (o primeiro vetor próprio). Treinei o classificador várias vezes, adicionando um recurso por vez e usei a validação cruzada e o erro RMS para comparar a qualidade da classificação. Descobri que as classificações melhoravam com cada recurso adicional e que o resultado final (com todos os 10 novos recursos) era muito melhor do que a primeira execução com (digamos) 2 recursos.

  • Dado que o PCA alegou que ~ 98% da variação estava no primeiro componente do meu conjunto de dados, por que a qualidade das classificações melhorou tanto?

  • Isso seria válido para outros classificadores? A escala de RF em vários núcleos, portanto, é muito mais rápido treinar do que (digamos) SVM.

  • E se eu tivesse transformado o conjunto de dados no espaço "PCA" e executado o classificador no espaço transformado. Como meus resultados mudariam?

Vishal
fonte
2
Você normalizou seus dados antes de executar o PCA? Se eu tivesse que adivinhar que eu acho que uma das suas características era em uma escala muito maior do que os outros ...
Marc Shivers
1
A função PCA normaliza tudo automaticamente ao fazer o cálculo.
Vishal 23/07
1
Talvez seja apenas eu, mas você poderia esclarecer o seguinte: sua primeira etapa consistiu em adicionar 10 recursos (brutos), um de cada vez, ou você trabalhou diretamente com os componentes do PCA? Como afirmado, entendo que este é o primeiro caso e você se pergunta se poderia trabalhar diretamente com os resultados do PCA. Nos dois casos, você aplicou o PCA em todas as variáveis, incluindo novos recursos, ou apenas posteriormente?
chl
Apliquei o PCA na matriz original com os 10 recursos adicionais. Treinei o classificador, adicionando um recurso por vez, para poder medir a melhoria incremental fornecida com a adição de cada recurso. A minha pergunta era o que se eu transformou o conjunto de dados (com os 10 novos recursos) no espaço PCA, e depois correu o classificador diretamente no conjunto de dados no espaço PCA
Vishal

Respostas:

7

Ao fazer a modelagem preditiva, você está tentando explicar a variação na resposta, não a variação nos recursos. Não há razão para acreditar que colocar tanto da variação de recurso em um único novo recurso capturará uma grande quantidade do poder preditivo dos recursos como um todo.

Isso geralmente é explicado como a diferença entre a regressão do componente principal em vez dos mínimos quadrados parciais.

Shea Parkes
fonte
"Não há razão para acreditar que colocar tanto da variação de recursos em um único recurso novo irá capturar uma grande quantidade do poder preditivo dos recursos como um todo". Esse nunca foi o ponto, e fazer isso resultaria em um classificador muito confuso! O objetivo era ter uma variedade de recursos, todos ilustrando diferentes aspectos do conjunto de dados, com a intenção de reduzir o erro de generalização. O objetivo de assumir o PCA foi ver quão diferentes eram os recursos. E meu ponto de postagem foi que meus recursos não eram tão diferentes, mas os resultados da RF ainda melhoraram.
Vishal
1
A mesma lógica ainda pode ser aplicada. Um novo recurso é altamente colinear, com um recurso anterior ainda pode trazer mais poder preditivo. Especificamente para um randomForest: se o recurso quase duplicado é importante em geral, agora uma versão ou outra é mais provável de ser selecionada como candidata dividida.
Shea Parkes
Isso gera a pergunta de acompanhamento: como você seleciona a priori os recursos do classificador de florestas aleatórias para melhorar a classificação, sem realmente executar o classificador? Existe um processo de triagem? Como você faz isso? :)
Vishal
Não conheço nenhum método útil de seleção a priori. Você pode fazer muitos loops aninhados de importância e seleção através de alguns pacotes R, como Boruta. Também não os achei úteis. Acho irracional acreditar que um determinado recurso não tem efeito. Acredito que enfatizar certos recursos em detrimento de outros poderia ser útil, mas o algoritmo randomForest básico já faz isso muito bem. Se você gosta tanto de modelagem e quer mais desempenho, sugiro empilhar outros algoritmos, alguns como algumas árvores aprimoradas, com sua randomForest.
Shea Parkes
1
Você poderia, a priori, calcular algumas medidas de separabilidade para suas aulas com base em seus recursos (distância de Jeffries-Matusita, divergência etc.). Isso pode ajudá-lo a descobrir em geral quais recursos ajudam a distinguir entre classes, mas, devido ao funcionamento da RF, não é fácil escolher aqui quais recursos fornecem o melhor conjunto para classificação. Um obstáculo claro aqui é que a RF encontra interações variáveis ​​por si só.
JEquihua
6

O primeiro componente principal é uma combinação linear de todos os seus recursos. O fato de explicar quase toda a variabilidade significa apenas que a maioria dos coeficientes das variáveis ​​no primeiro componente principal é significativa.

Agora, as árvores de classificação que você gera também são um animal diferente. Eles fazem divisões binárias em variáveis ​​contínuas que melhor separam as categorias que você deseja classificar. Isso não é exatamente o mesmo que encontrar combinações lineares ortogonais de variáveis ​​contínuas que fornecem a direção da maior variância. De fato, discutimos recentemente um artigo sobre CV em que o PCA foi usado para análise de agrupamentos e os autores descobriram que existem situações em que a melhor separação é encontrada não nos primeiros componentes principais, mas nos últimos.

Michael R. Chernick
fonte
3
"De fato, discutimos recentemente um artigo sobre CV em que PCA" você tem um link para isso? Estou muito interessado :)
user603
Vou procurar a discussão.
22812 Michael R. Chernick
Você terá a gentileza de dar uma olhada na questão relacionada ?
Nadya