Os métodos do kernel podem ser usados para problemas supervisionados e não supervisionados. Exemplos bem conhecidos são a máquina de vetores de suporte e o agrupamento espectral do kernel , respectivamente.
Os métodos do kernel fornecem uma maneira estruturada de usar um algoritmo linear em um espaço de recurso transformado, para o qual a transformação normalmente não é linear (e para um espaço dimensional mais alto). A principal vantagem que esse truque chamado kernel traz é que padrões não lineares podem ser encontrados a um custo computacional razoável .
Observe que eu disse que o custo computacional é razoável, mas não insignificante. Os métodos do kernel normalmente constroem uma matriz do kernel com N o número de instâncias de treinamento. A complexidade dos métodos do kernel é, portanto, uma função do número de instâncias de treinamento, e não do número de dimensões de entrada. As máquinas de vetores de suporte, por exemplo, têm uma complexidade de treinamento entre O ( N 2 ) e O ( N 3 ) . Para problemas com N muito grande , essa complexidade é atualmente proibitiva.K ∈ RN× NNO ( N2)O ( N3)N
Isso torna os métodos do kernel muito interessantes do ponto de vista computacional quando o número de dimensões é grande e o número de amostras é relativamente baixo (digamos, menos de 1 milhão).
Relacionado: Kernel linear e kernel não linear para máquina de vetores de suporte?
SVM para problemas de grande escala
Para problemas dimensionais muito altos, como as 10000
dimensões mencionadas na pergunta, geralmente não há necessidade de mapear para um espaço de recurso dimensional mais alto. O espaço de entrada já é bom o suficiente. Para tais problemas, os métodos lineares são ordens de magnitude mais rápidas, com quase o mesmo desempenho preditivo. Exemplos desses métodos podem ser encontrados no LIBLINEAR ou no Vowpal Wabbit .
Os métodos lineares são particularmente interessantes quando você tem muitas amostras em um espaço de entrada de alta dimensão. Quando você possui apenas amostras, o uso de um método de kernel não linear também será barato (já que N é pequeno). Se você tivesse, digamos, 5.000.000 amostras em 10.000 dimensões, os métodos do kernel seriam inviáveis.500N5.000.00010.000
Para problemas de baixa dimensão com muitas instâncias de treinamento (os chamados problemas grandes pequenos p ), os métodos lineares podem gerar baixa precisão preditiva. Para esses problemas, métodos de ensemble como o EnsembleSVM fornecem limites de decisão não lineares a um custo computacional significativamente reduzido em comparação com o SVM padrão.Np
RBF
kernellibsvm
, ele sempre se ajusta, o classificador atinge uma alta precisão, mas baixa precisão no conjunto de testes. E se eu fizer uma redução de dimensão antes do classificador, e as dimensões reduzidas estiverem próximas do número de amostras de treinamento, o classificador poderá obter um bom lucro entre o conjunto de treinamento e teste. Os resultados correspondem aos resultados mais empíricos? Obrigado.gamma
para o kernel RBF. O valor ideal paragamma
está relacionado ao número de dimensões de entrada. A abordagem de ajuste mais comum é a validação cruzada. Se você usou o mesmo valorgamma
com e sem redução de dimensionalidade, provavelmente está cometendo um erro.grid.py
inlibsvm
para fazer a validação cruzada. E na maioria das circunstâncias, para dados de grandes dimensões, osgamma
sempre muito pequenos, como0.00001
esse nível.EnsembleSVM
. Ele precisa tornar o procedimento de validação cruzada multithreading? E acho que, na fase de previsão, será bom prever grandes dados em lotes e multithreading ou multi-máquinas?esvm-train
eesvm-predict
. Para desativar multithreading, use o seguinte sinalizador nessas ferramentas:-threads 1
.