É possível usar o PCA do kernel para seleção de recursos?

9

É possível usar a análise de componentes principais do kernel (kPCA) para Indexação Semântica Latente (LSI) da mesma maneira que o PCA é usado?

Realizo o LSI em R usando a prcompfunção PCA e extraio os recursos com cargas mais altas dos primeiros componentes. Com isso, recebo os recursos que descrevem melhor o componente.k

Tentei usar a kpcafunção (do kernlibpacote), mas não consigo ver como acessar os pesos dos recursos para um componente principal. Isso é possível ao usar métodos de kernel?

user3683
fonte
Você já tentou a função princomp?
Mariana soffer 12/03/11

Respostas:

6

Eu acho que a resposta para sua pergunta é negativa: não é possível.

O PCA padrão pode ser usado para a seleção de recursos, porque cada componente principal é uma combinação linear de recursos originais e, portanto, é possível ver quais recursos originais contribuem mais para os componentes principais mais importantes, consulte, por exemplo, aqui: Uso da análise de componente principal (PCA) para seleção de recursos .

Porém, no PCA do kernel, cada componente principal é uma combinação linear de recursos no espaço de destino e, por exemplo, no kernel Gaussiano (que é frequentemente usado), o espaço de destino é de dimensão infinita. Portanto, o conceito de "loadings" não faz muito sentido para o kPCA e, de fato, os componentes principais do kernel são computados diretamente, ignorando a computação dos eixos principais (que para o PCA padrão são dados em R prcomp$rotation) completamente, graças ao que é conhecido como truque do kernel . Veja, por exemplo, aqui: O Kernel PCA com kernel linear é equivalente ao PCA padrão? para mais detalhes.

Então não, não é possível. Pelo menos não há uma maneira fácil.

ameba
fonte
2
(+1) Eu acho que é mais fácil explicar com uma analogia com SVMs, onde no espaço linear você pode calcular os pesos que cada variável contribui para o hiperplano de separação (meio que uma medida de importância, utilizável pelo menos para a seleção de recursos) enquanto nos espaços do kernel é muito complexo ou totalmente impossível de fazer. A mesma lógica aqui.
Firebug
2

O exemplo a seguir (extraído do manual de referência do kernlab) mostra como acessar os vários componentes do PCA do kernel:

data(iris)
test <- sample(1:50,20)
kpc <- kpca(~.,data=iris[-test,-5],kernel="rbfdot",kpar=list(sigma=0.2),features=2)

pcv(kpc)        # returns the principal component vectors
eig(kpc)        # returns the eigenvalues
rotated(kpc)    # returns the data projected in the (kernel) pca space
kernelf(kpc)    # returns the kernel used when kpca was performed

Isso responde sua pergunta?

Lalas
fonte
Eu tentei rodado (kpca) pensando que é o mesmo que prcomp $ rotação; que é (tirado do formulário R help (prcomp)): "rotação: a matriz de cargas variáveis ​​(ou seja, uma matriz cujas colunas contêm os vetores próprios)". No entanto, não é. No entanto, a pergunta também é muito genérica, porque não tenho certeza se o LSA / LSI é possível usando a redução de dimensionalidade não linear.
user3683
desculpe, mas eu posso estar perdendo a pergunta; Por que você acha que a redução de dimensionalidade não linear não é possível no LSA / LSI?
Lala
11
porque não há uma combinação linear das dimensões, mas uma que depende de uma função do kernel. É possível definir nesta configuração o peso que uma dimensão possui para um componente principal (não linear)?
user3683
2
(-1) Esse pode ser um trecho de código útil, mas acho que não responde à pergunta original.
Ameba