Devo usar o Kernel Trick sempre que possível para dados não lineares?

13

Recentemente, aprendi sobre o uso do truque Kernel, que mapeia dados em espaços dimensionais mais altos, na tentativa de linearizar os dados nessas dimensões. Existem casos em que devo evitar o uso dessa técnica? É apenas uma questão de encontrar a função correta do kernel?

Para dados lineares, é claro que isso não é útil, mas para dados não lineares, isso sempre parece útil. Usar classificadores lineares é muito mais fácil do que não linear em termos de tempo de treinamento e escalabilidade.

JDong
fonte

Respostas:

8

Para dados lineares, é claro que isso não é útil, mas para dados não lineares, isso sempre parece útil. Usar classificadores lineares é muito mais fácil do que não linear em termos de tempo de treinamento e escalabilidade.

O @BartoszKP já explicou por que o truque do kernel é útil. Para responder completamente à sua pergunta, no entanto, gostaria de salientar que a kernelização não é a única opção para lidar com dados não linearmente separáveis.

Existem pelo menos três alternativas boas e comuns para a delinearização do modelo:

  • Métodos baseados em rede neutal, nos quais você adiciona uma (ou mais) camadas de unidades de processamento, capazes de transformar seus dados em um caso linearmente separável. No caso mais simples, é uma camada baseada em sigmóides, que adiciona não linearidade ao processo. Uma vez inicializados aleatoriamente, eles recebem atualizações durante a otimização baseada em gradiente da camada superior (que atualmente resolve o problema linear).
  • Em particular - técnicas de aprendizado profundo podem ser usadas aqui para preparar dados para uma classificação linear adicional. É uma idéia muito semelhante à anterior, mas aqui você primeiro treina suas camadas de processamento para encontrar um bom ponto de partida para o ajuste fino adicional com base no treinamento de algum modelo linear.
  • Projeções aleatórias - você pode amostrar projeções (não lineares) de algum espaço predefinido e treinar um classificador linear sobre elas. Essa ideia é amplamente explorada no chamado aprendizado de máquina extremo , onde solucionadores lineares muito eficientes são usados ​​para treinar um classificador simples em projeções aleatórias e obter um desempenho muito bom (em problemas não lineares na classificação e na regressão, veja, por exemplo, aprendizado extremo máquinas ).

Resumindo, a kernelização é uma ótima técnica de delinearização, e você pode usá-la quando o problema não for linear, mas isso não deve ser cego "se for". Este é apenas um dos pelo menos alguns métodos interessantes, que podem levar a vários resultados, dependendo do problema e dos requisitos. Em particular, o ELM tende a encontrar soluções muito semelhantes às fornecidas pelo SVM kernelizado, enquanto ao mesmo tempo pode ser treinado linhas de magnitude mais rapidamente (por isso aumenta muito melhor do que os SVMs kernelizados).

lejlot
fonte
10

O preço pago pelo truque do kernel em geral, pelos métodos lineares, está tendo limites de generalização piores. Para um modelo linear, sua dimensão VC também é linear em termos de número de dimensões (por exemplo, a dimensão VC para um Perceptron é d + 1).

Agora, se você realizar uma transformação não linear complexa em um espaço dimensional alto, a dimensão VC do seu conjunto de hipóteses é significativamente maior, pois agora é linear em termos do número de dimensões no novo espaço dimensional alto. E com isso, o limite da generalização aumenta.

As máquinas de vetores de suporte exploram o truque do kernel da maneira mais eficiente, fazendo duas coisas:

BartoszKP
fonte
1
"também é linear em termos de número de pesos" em termos de dimensão espacial, não o número de pesos. Você pode ter um classificador linear parametrizado com quantos pesos quiser, mas sua dimensão VC ainda é d + 1 (onde d é dimensionalidade do espaço). "a dimensão VC para modelos SVM está relacionada ao número de vetores de suporte" Como exatamente a dimensão VC é realocada para o número de SV? Estou ciente da margem rígida, mas no caso da margem flexível não existe essa relação. Mesmo nos limites de complexidade da Radamacher, você não encontrará o número de SVs como uma variável.
lejlot
Além disso, "portanto, é irrelevante o quão" grande "é o espaço de destino do kernel, você não perde nada em termos do limite de generalização", tanto quanto eu sei completamente falso. Espaços dimensionais altos levarão a perder recursos de generalização, mesmo com modelos fortemente regularizados como o SVM.
lejlot
1
@lejlot Obrigado, corrigimos os dois primeiros erros. Preciso de algum tempo para se relacionar com seus dois últimos observações - Vou tentar melhorar a resposta e fornecer algumas fontes, depois que eu verificar novamente minhas informações :)
BartoszKP
1
Agora está quase correto, mas qual é a razão para supor que esse tamanho do espaço do kernel é irrelevante? Pegue qualquer conjunto de dados, execute um SVM com o kernel RBF e C-> inf e você sofrerá um super ajuste. Não é tão simples. O número de dimensões no espaço de feição é relevante , mas pode ser controlado com C (como limite superior dos multiplicadores de intervalo). Em particular - a dimensão VC para SVM com RBF é infinita, e o limite de generalização (do Vapnik) é inútil (Radamacher poderia funcionar, mas essa é uma história totalmente diferente).
lejlot
1
@lejlot Eu dei outra referência - eles fornecem um limite para o caso de margem flexível explicitamente, e não depende do número de dimensões.
precisa saber é o seguinte
6

Tentarei fornecer uma resposta não técnica para sua pergunta.

De fato, o linear deve ser preferido e deve ser a primeira escolha pelos motivos mencionados, tempo de treinamento, escalabilidade, além de facilitar a interpretação do modelo final, a opção de trabalhar em primal ou duplo, mais tolerância ao sobreajuste etc.

Se o modelo linear não resultar em desempenho satisfatório, você pode tentar soluções não lineares. Algumas compensações a serem consideradas incluem:

  • a escolha do kernel. Isso não é óbvio, geralmente você precisa testar opções diferentes
  • existe o risco de sobreajustar o conjunto de treinamento. Na verdade, é muito fácil se adaptar demais, se você quiser. Para evitar o ajuste excessivo, você precisa de uma estrutura de avaliação mais forte (você precisa medir a variação / estabilidade do desempenho em dados não vistos) e precisa de dados suficientes para poder fazer a seleção adequada do modelo
  • você trabalha no dual e, portanto, não pode interpretar o modelo final, ou seja, não pode afirmar que o recurso X é mais importante que o recurso Y etc.
  • o tempo de treinamento é aumentado com o volume de dados (menos com o número de recursos, pois está no dual)
iliasfl
fonte
Essa é uma visão interessante sobre "trabalhar com dupla", levando à incapacidade de reivindicar importâncias de recursos. Você teria alguma referência ao material explicando melhor?
Javadba #