Como escolher um kernel para o kernel PCA?

12

Quais são as maneiras de escolher qual kernel resultaria em boa separação de dados na saída final de dados pelo kernel PCA (análise de componentes principais) e quais são as maneiras de otimizar os parâmetros do kernel?

Os termos de Layman, se possível, seriam muito apreciados, e links para artigos que explicam tais métodos também seriam bons.

Cebolinha
fonte
1
Quando você diz "boa separação de dados", a que exatamente você está se referindo? Que aplicação do kernel PCA você tem em mente? Se isso tem algo a ver com "separação de dados", talvez você deva usar alguma técnica de classificação (como a máquina de vetores de suporte ao kernel) em vez do kPCA? Além de tudo isso, boa pergunta, +1. Eu não tenho experiência com a escolha do kernel, por isso não posso ajudá-lo aqui.
Ameba diz Restabelecer Monica
@amoeba É para ser usado na redução não linear de dimensionalidade. Meu conhecimento sobre vetores de suporte é um pouco limitado, porque nunca fiz nenhum curso de CS; Sou estudante de graduação e tenho aprendido através de artigos on-line. Por "boa separação de dados", quero dizer o que é mostrado pelos exemplos plotados neste artigo . Estou trabalhando com o Matlab e meu código PCA do kernel está em funcionamento para kernels simples, poli, radiais e sigmoides, mas seria útil saber quando usar qual para obter melhores resultados.
Cebolinha
Eu acho que a melhor (apenas?) Maneira de selecionar um kernel é usar a validação cruzada, veja aqui: Como selecionar o kernel para o SVM? Você só precisa ter uma medida de desempenho para seu kPCA para usar a validação cruzada. Separação classe pode ser uma medida decente se é isso que você está depois, mas nota que PCA / kPCA não é projetado em tudo para resultar em uma separação boa classe; é simplesmente maximizar a variação capturada.
ameba diz Restabelecer Monica
Fiz algumas leituras e talvez possa responder sua pergunta, afinal. Mas pode levar algum tempo (dias).
Ameba diz Reinstate Monica
@amoeba Maximizar a variação faz sentido para mim agora que você mencionou. Eu mesmo examinarei a validação cruzada, mas seria ótimo se você também pudesse pesquisar um pouco se encontrar tempo! Obrigado.
Cebolinha

Respostas:

7

A abordagem geral para selecionar um kernel ideal (o tipo de kernel ou os parâmetros do kernel) em qualquer método baseado em kernel é a validação cruzada. Veja aqui a discussão da seleção do kernel para máquinas de vetores de suporte: Como selecionar o kernel para o SVM?

A idéia por trás da validação cruzada é que deixamos de fora alguns dados de "teste", executamos nosso algoritmo para ajustar o modelo nos dados restantes de "treinamento" e depois verificamos quão bem o modelo resultante descreve os dados de teste (e qual o tamanho do erro é). Isso é repetido para diferentes dados deixados de fora, os erros são calculados para formar um erro médio de validação cruzada e, em seguida, diferentes algoritmos podem ser comparados para escolher um com o menor erro. No SVM, pode-se usar, por exemplo, a precisão da classificação (ou medidas relacionadas) como a medida do desempenho do modelo. Em seguida, seleciona-se um kernel que produz a melhor classificação dos dados de teste.

A questão então se torna: que medida de desempenho do modelo se pode usar no kPCA? Se você deseja obter uma "boa separação de dados" (presumivelmente uma boa separação de classes), pode medi-lo de alguma forma nos dados de treinamento e usá-lo para encontrar o melhor kernel. Note, no entanto, que PCA / kPCA não são projetados para produzir uma boa separação de dados (eles não têm rótulos de classe em conta em tudo ). Então, de um modo geral, alguém desejaria outra medida de desempenho do modelo, não relacionada à classe.

No PCA padrão, pode-se usar o erro de reconstrução como a medida de desempenho no conjunto de testes. No PCA do kernel, também é possível calcular o erro de reconstrução, mas o problema é que não é comparável entre diferentes kernels: erro de reconstrução é a distância medida no espaço de recurso de destino; e kernels diferentes correspondem a espaços de destino diferentes ... Portanto, temos um problema.

Uma maneira de resolver esse problema é calcular de alguma forma o erro de reconstrução no espaço original, não no espaço de destino. Obviamente, o ponto de dados de teste deixado de fora fica no espaço original. Mas sua reconstrução do kPCA vive no [subespaço de baixa dimensão] do espaço alvo. No entanto, o que se pode fazer é encontrar um ponto ("pré-imagem") no espaço original que seria mapeado o mais próximo possível desse ponto de reconstrução e depois medir a distância entre o ponto de teste e essa pré-imagem como erro de reconstrução.

Não darei todas as fórmulas aqui, mas, em vez disso, encaminhá-lo para alguns trabalhos e apenas inserir aqui várias figuras.

A idéia de "pré-imagem" no kPCA foi aparentemente introduzida neste artigo:

Mika et al. não estão fazendo validação cruzada, mas precisam de pré-imagens para fins de redução de ruído, veja esta figura:

remoção de ruído do kPCA de Mika et al.

Pontos não densos (grossos) são pré-imagens de projeções de kPCA (não há teste e treinamento aqui). Não é uma tarefa trivial encontrar essas pré-imagens: é preciso usar a descida gradiente, e a função de perda dependerá do kernel.

E aqui está um artigo muito recente que usou pré-imagens para fins de validação cruzada e seleção de kernel / hiperparâmetro:

Este é o algoritmo deles:

Alam e Fukumizu

E aqui estão alguns resultados (que eu acho que são praticamente auto-explicativos):

Alam e Fukumizu

ameba diz Restabelecer Monica
fonte
1
(+1) Pode ser útil observar que essa pré-imagem é o conjunto de meios de Fréchet / Karcher dos pontos atribuídos a um determinado cluster, não que isso necessariamente ajude com alguma coisa.
Dougal
@ Dougal: uau, obrigado, eu não estava ciente deste termo. Mas não tenho certeza se entendi. Considere a primeira figura que eu publiquei aqui (de Mika et al.): Cada 2d ponto é mapeado para o espaço unidimensional do PC do núcleo que é então mapeado de volta para a 2d pré-imagem . Quando você diz que a pré-imagem é o "conjunto de meios de Frechet / Karcher dos pontos atribuídos a um determinado cluster", o que você quer dizer com cluster e por que existe um conjunto? x y y z zxxyyzz
Ameba diz Reinstate Monica
Pensando bem, acho que não prestei atenção suficiente antes; meu comentário se aplica ao k-means do kernel, não ao kPCA. A pré-imagem está definitivamente relacionada a esse conceito, mas não é a mesma coisa. Desculpe pelo barulho. :)
Dougal