Data de entrega 21/3 em aula
No arquivo zip treino.zip contem uma colecao de imagens PGM de digitos manuscritos. . Cada imagem do conjunto possui 64 x 64 pixels no formato PGM onde cada pixel tem um valor 0 ou 1. Cada imagem tem um nome no formato X_yyy.BMP.inv.pgm onde X é o dígito representado na imagem. ATENCAO - removam o arquivo 0_033.BMP.inv.pgm do treino - esta imagem tem tamanho diferente das outras.
O arquivo teste.zip contem 50 images de digitos no mesmo formato.
oa arquivos PGM comecam com 3 linhas contento
ATENCAO Há duas complicações quanto ao PCA. Há mais dimensões do que dados e por isso as técnicas de PCA que usam a matriz de covariância não funcionam - eles não conseguem extrair os autovetores (ainda não sei exatamente porque). Mas a técnica mais comum de calcular o PCA é através da decomposição SVD da matriz original. Essa técnica funciona nos dados onde há mais dimensões que dados. Portanto usem PCAs baseados em SVD (por exemplo prcomp do R)
Mas ai há um outro problema. Essas técnicas não devolvem (até onde eu vi) um jeito de mapear as dimensões originais nas dimensões do PCA (porque em princípio elas não usam as dimensões originais). Era isso que precisávamos - converter os dados de treino nas dimensões do PCA e usar a mesma transformação para converter os dados de teste. PCA baseados em SVD devolvem os dados já transformados mas não a transformação. Para resolver nosso problema, junte os dados de treino e os de teste num só novo conjunto de dados e tire o PCA deste conjunto. Não é a coisa mais certa mas é o que dá para fazer.
So para documentacao, alguns alunos me mostraram como fazer a
coisa certa com o PCA em R.
n é o numero de dimensoes a manter
pca<- prcomp(treino)
novotreino<-pca$x[,1:n]
novoteste<-scale(teste,pca$center,pca$scale)%*%pca$rotation[,1:n]