Eu tenho uma matriz de dados de imagem que é o número de exemplos de imagens é o número de pixels da imagem: , porque cada imagem é uma imagem 3 canais . Além disso, cada uma das 50000 imagens pertence a 1 de 10 classes possíveis. Ou seja, existem 5000 imagens da classe ' ', 5000 imagens, da classe ' ', etc ... e há 10 classes no total. Isso faz parte do conjunto de dados CIFAR-10.car
bird
O objetivo final aqui é executar a classificação nesse conjunto de dados. Para esse fim, o professor mencionou para testar o PCA e, em seguida, colocar esses recursos em um classificador. Como meu classificador, estou usando uma rede neural totalmente conectada com uma camada oculta e uma saída softmax.
Meu problema é que acredito que fiz o PCA da maneira correta , mas acho que meu caminho pode ser mal aplicado .
Isto é o que eu fiz:
Para calcular o PCA dos meus dados, foi o que fiz até agora:
Primeiro, eu calculo a imagem média . Vamos ser o 'ésima linha de . Então,
Calcular a matriz de covariância dos meus dados de imagem:
Execute uma decomposição de vetor próprio de , produzindo , e , em que a matriz codifica as principais direções (vetores próprios) como colunas. (Além disso, suponha que os valores próprios já estejam classificados em ordem decrescente). Portanto:
Finalmente, execute o PCA: ou seja, calcule uma nova matriz de dados , em que é o número de componentes principais que desejamos ter. Deixe - ou seja, uma matriz com apenas as primeiras colunas. Portanto:
A questão:
Acho que meu método de executar o PCA nesses dados é mal aplicado, porque da maneira que o fiz, basicamente acabo correlacionando meus pixels um do outro. (Suponha que eu tenha definido ). Ou seja, as linhas resultantes de parecem mais ou menos ruído. Sendo assim, minhas perguntas são as seguintes:
- Realmente desassociei os pixels? Ou seja, removi de fato qualquer acoplamento entre pixels que um classificador em perspectiva esperava usar?
- Se a resposta acima for verdadeira, por que faríamos o PCA dessa maneira?
- Finalmente, relacionado ao último ponto, como faríamos a redução da dimensionalidade via PCA nas imagens, se, de fato, o método que eu usei errado?
EDITAR:
Depois de estudar mais e receber muitos comentários, refinei minha pergunta para: Se alguém usasse o PCA como uma etapa de pré-processamento para classificação de imagens, é melhor:
- Executar classificação nos k componentes principais das imagens? (Matriz acima, agora cada imagem tem o comprimento vez do original )
- OU é melhor executar a classificação nas imagens reconstruídas dos vetores k- (que serão então , portanto, embora cada imagem AINDA tenha o tamanho original de , era de fato reconstruído a partir de autovetores).
Empiricamente, eu descobri que a precisão da validação sem PCA> precisão de validação com reconstrução de PCA> precisão de validação com PCs de PCA.
As imagens abaixo mostram isso na mesma ordem. 0,5> 0,41> 0,31 precisão de validação.
Treinamento em imagens em pixels brutos de comprimento :
Treinamento em imagens de comprimento mas reconstruídas com k = 20 vetores próprios:
E, finalmente, o treinamento sobre os principais componentes $ k = 20 *:
Tudo isso tem sido muito esclarecedor. Como descobri, o PCA não garante que os principais componentes facilitem a demarcação entre diferentes classes. Isso ocorre porque os eixos principais calculados são eixos que apenas tentam maximizar a energia da projeção em todas as imagens, independente da classe de imagem. Por outro lado, imagens reais - reconstruídas fielmente ou não, ainda mantêm algum aspecto de diferenças espaciais que podem ir - ou deveriam ir - para tornar possível a classificação.