PCA e a divisão trem / teste


35

Eu tenho um conjunto de dados para o qual tenho vários conjuntos de rótulos binários. Para cada conjunto de rótulos, treino um classificador, avaliando-o por validação cruzada. Quero reduzir a dimensionalidade usando a análise de componentes principais (PCA). Minha pergunta é:

É possível executar o PCA uma vez para todo o conjunto de dados e usar o novo conjunto de dados de menor dimensionalidade para validação cruzada, conforme descrito acima? Ou preciso fazer um PCA separado para cada conjunto de treinamento (o que significaria fazer um PCA separado para cada classificador e para cada dobra de validação cruzada)?

Por um lado, o PCA não faz uso dos rótulos. Por outro lado, ele usa os dados de teste para fazer a transformação, então, receio que isso possa influenciar os resultados.

Devo mencionar que, além de me poupar algum trabalho, fazer o PCA uma vez no conjunto de dados inteiro permitiria visualizar o conjunto de dados para todos os conjuntos de etiquetas de uma só vez. Se eu tiver um PCA diferente para cada conjunto de etiquetas, precisarei visualizar cada conjunto de etiquetas separadamente.


Para referência futura. Consulte esta pergunta sobre como executar a validação cruzada com o PCA no R com o caretpacote: Validação cruzada do PCA e k-fold no Caret .
Ameba diz Reinstate Monica


Respostas:


34

Para medir o erro de generalização, é necessário fazer o último: um PCA separado para cada conjunto de treinamento (o que significaria fazer um PCA separado para cada classificador e para cada dobra CV).

Você aplica a mesma transformação ao conjunto de testes: ou seja, você não faz um PCA separado no conjunto de testes! Você subtrai a média (e, se necessário, divide pelo desvio padrão) do conjunto de treinamento, conforme explicado aqui: Centralize zero o conjunto de testes após o PCA no conjunto de treinamento . Em seguida, você projeta os dados nos PCs do conjunto de treinamento.


  • Você precisará definir um critério automático para o número de PCs a serem usados.
    Como é apenas uma primeira etapa de redução de dados antes da classificação "real", o uso de alguns PCs em excesso provavelmente não afetará o desempenho. Se você tem uma expectativa de quantos PCs seriam bons com a experiência, talvez você possa usá-lo.

  • Você também pode testar posteriormente se foi necessário refazer o PCA para cada modelo substituto (repetindo a análise com apenas um modelo PCA). Eu acho que vale a pena relatar o resultado desse teste.

  • Certa vez, medi o viés de não repetir o PCA e constatei que, com meus dados de classificação espectroscópica, detectava apenas metade da taxa de erro de generalização ao não refazer o PCA para todos os modelos substitutos.

Dito isto, é possível construir um modelo PCA adicional de todo o conjunto de dados para fins descritivos (por exemplo, visualização). Apenas certifique-se de manter as duas abordagens separadas uma da outra.


Ainda estou achando difícil entender como um PCA inicial em todo o conjunto de dados influenciaria os resultados sem ver os rótulos das classes.

Mas ele vê os dados. E se a variação entre classes for grande em comparação com a variação dentro da classe, a variação entre classes influenciará a projeção do PCA. Geralmente, a etapa do PCA é concluída porque você precisa estabilizar a classificação. Ou seja, em uma situação em casos adicionais fazer influenciar o modelo.

Se a variação entre as classes for pequena, esse viés não será grande, mas nesse caso o PCA também não ajudaria na classificação: a projeção do PCA não ajudaria a enfatizar a separação entre as classes.


Obrigado, isso é exatamente o que eu pensei, então é bom ouvi-lo de uma fonte independente. Ainda estou achando difícil entender como um PCA inicial em todo o conjunto de dados influenciaria os resultados sem ver os rótulos das classes.
Bitwise

@ Bitwise: veja minha edição
cbeleites suporta Monica

Olá @cbeleites, desejo tornar esse tópico um tópico "canônico" para as perguntas sobre PCA e divisão de trem / teste (são muitos!) E marque-os como duplicados. Tomei a liberdade de acrescentar uma frase à sua resposta que pudesse esclarecer um mal-entendido que geralmente surge nas perguntas duplicadas. Espero que você esteja feliz com minha edição, mas verifique! +1, entre.
ameba diz Restabelecer Monica

@amoeba, muito obrigado. Sim, esse é um ponto importante que você adicionou. Muito obrigado pelo trabalho que você fez para limpar a coleção de perguntas.
cbeleites suporta Monica

11
@FelipeAlmeida: yes
cbeleites suporta Monica

2

A resposta a esta pergunta depende do seu projeto experimental. O PCA pode ser executado em todo o conjunto de dados, desde que você não precise construir seu modelo antes de conhecer os dados que está tentando prever. Se você possui um conjunto de dados no qual possui várias amostras, algumas das quais são conhecidas e outras são desconhecidas, e deseja prever as incógnitas, incluindo as incógnitas no PCA, você terá uma visão mais rica da diversidade de dados e pode ajudar a melhorar o desempenho do modelo. Como o PCA não é supervisionado, ele não está "atingindo o pico" porque você pode fazer o mesmo com as amostras desconhecidas e o conhecido.

Se, por outro lado, você tiver um conjunto de dados em que precisará construir o modelo agora e, em algum momento no futuro, obter novas amostras que deverão prever usando esse modelo pré-construído, deverá fazer o PCA separado em cada dobra para ter certeza de que será generalizado. Como nesse caso, não saberemos como os novos recursos podem ser e não podemos reconstruir o modelo para dar conta dos novos recursos, fazer o PCA com os dados de teste seria "máximo". Nesse caso, os recursos e os resultados das amostras desconhecidas não estão disponíveis quando o modelo seria usado na prática; portanto, eles não deveriam estar disponíveis ao treinar o modelo.


0

Faça o último, PCA no treinamento definido sempre

No PCA, aprendemos a matriz reduzida: U, que nos ajuda a obter a projeçãoZ_train = U x X_train

No momento do teste, usamos o mesmo U aprendido na fase de treinamento e depois calculamos a projeçãoZ_test = U x X_test

Portanto, estamos projetando essencialmente o conjunto de testes no espaço reduzido de recursos obtido durante o treinamento.

A suposição subjacente é que o conjunto de testes e trens deve vir da mesma distribuição, o que explica o método acima.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.