Sou iniciante no que diz respeito ao suporte a máquinas vetoriais. Existem algumas diretrizes que indicam qual kernel (por exemplo, linear, polinomial) é o mais adequado para um problema específico? No meu caso, tenho que classificar as páginas da Web de acordo com elas conterem alguma informação específica ou não, ou seja, tenho um problema de classificação binária.
Você pode dizer em geral qual kernel é mais adequado para esta tarefa? Ou tenho que tentar vários deles no meu conjunto de dados específico para encontrar o melhor? A propósito, estou usando a biblioteca Python scikit-learn que faz uso da biblioteca libSVM.
classification
svm
model-selection
libsvm
kernel-trick
pemistahl
fonte
fonte
Respostas:
Você realmente encontrou uma questão em aberto na literatura. Como você diz, há uma variedade de núcleos (por exemplo, função linear, base radial, sigmóide, polinomial) e executará sua tarefa de classificação em um espaço definido por suas respectivas equações. Que eu saiba, ninguém demonstrou definitivamente que um kernel sempre se sai melhor em um tipo de tarefa de classificação de texto em relação a outro.
Uma coisa a considerar é que cada função do kernel possui 1 ou mais parâmetros que precisarão ser otimizados para o seu conjunto de dados, o que significa que, se você estiver fazendo isso corretamente, deverá ter uma segunda coleção de treinamento em que possa investigue os melhores valores para esses parâmetros. (Digo uma segunda coleção de espera, porque você já deve ter uma que esteja usando para descobrir os melhores recursos de entrada para o seu classificador.) Fiz um experimento há algum tempo, no qual fiz uma otimização em larga escala de cada um dos esses parâmetros para uma tarefa simples de classificação textual e descobriram que cada núcleo parecia ter um desempenho razoavelmente bom, mas o fazia em configurações diferentes. Se me lembro corretamente dos resultados, o sigmoid teve o melhor desempenho, mas o fez com ajustes de parâmetros muito específicos - os que levaram mais de um mês para a minha máquina encontrar.
fonte
Experimente o kernel gaussiano.
O kernel gaussiano é frequentemente testado primeiro e acaba sendo o melhor kernel em muitos aplicativos (com seus recursos de palavras-chave também). Você deve experimentar o kernel linear também. Não espere que ele dê bons resultados, os problemas de classificação de texto tendem a ser não lineares. Mas você tem uma ideia dos seus dados e pode ficar feliz com o quanto a não linearidade melhora seus resultados.
Certifique-se de validar corretamente a largura do kernel e pense em como deseja normalizar seus recursos (tf-idf etc).
Eu diria que você pode melhorar seus resultados com uma melhor normalização de recursos mais do que com a escolha de um kernel diferente (ou seja, não o gaussiano).
fonte