Após algumas pesquisas, encontro muito pouco sobre a incorporação de pesos de observação / erros de medição na análise de componentes principais. O que eu acho tende a depender de abordagens iterativas para incluir ponderações (por exemplo, aqui ). Minha pergunta é por que essa abordagem é necessária? Por que não podemos usar os autovetores da matriz de covariância ponderada?
pca
measurement-error
weighted-data
noname
fonte
fonte
Respostas:
Depende do que exatamente seus pesos se aplicam.
Pesos de linha
Deixe ser a matriz de dados com variáveis em colunas e n observações x i em fileiras. Se cada observação tiver um peso associado, w iX n xi wi , é realmente fácil incorporar esses pesos no PCA.
Primeiro, é preciso calcular a média ponderada e subtrai-lo a partir dos dados, a fim decentrar-lo.μ=1∑wi∑wixi
Em seguida, calculamos a matriz de covariância ponderada , ondeW=diag(wi)é a matriz diagonal de pesos, e aplica o PCA padrão para analisá-lo.1∑wiX⊤WX W=diag(wi)
Pesos de células
O artigo de Tamuz et al., 2013 , que você encontrou, considera um caso mais complicado quando pesos diferentes são aplicados a cada elemento da matriz de dados. Então, de fato, não há solução analítica e é preciso usar um método iterativo. Observe que, como reconhecido pelos autores, eles reinventaram a roda, pois tais pesos gerais certamente já foram considerados antes, por exemplo, em Gabriel e Zamir, 1979, aproximação mais baixa de matrizes por mínimos quadrados com qualquer escolha de pesos . Isso também foi discutido aqui .Weu j
Como observação adicional: se os pesos variam com as variáveis e as observações, mas são simétricos, de modo que w i j = w j i , a solução analítica é possível novamente, ver Koren e Carmel, 2004, Robust Linear Dimensionality Reduction .Weu j Weu j= wj i
fonte
Muito obrigado ameba pela compreensão sobre pesos de linha. Sei que isso não é stackoverflow, mas tive algumas dificuldades para encontrar uma implementação do PCA ponderado por linha com explicação e, como esse é um dos primeiros resultados ao pesquisar no PCA ponderado, achei que seria bom anexar minha solução , talvez possa ajudar outras pessoas na mesma situação. Nesse snippet de código Python2, um PCA ponderado com um kernel RBF como o descrito acima é usado para calcular as tangentes de um conjunto de dados 2D. Ficarei muito feliz em ouvir alguns comentários!
E uma amostra de saída (faz o mesmo para cada ponto):
Cheers,
Andres
fonte