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.
Respostas:
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:
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:
E aqui estão alguns resultados (que eu acho que são praticamente auto-explicativos):
fonte