libsvm “atingindo o número máximo de iterações” aviso e validação cruzada

20

Estou usando libsvm no modo C-SVC com um kernel polinomial de grau 2 e sou obrigado a treinar vários SVMs. Cada conjunto de treinamento possui 10 recursos e 5000 vetores. Durante o treinamento, recebo este aviso para a maioria dos SVMs que treino:

WARNING: reaching max number of iterations
optimization finished, #iter = 10000000

Alguém poderia explicar o que esse aviso implica e, talvez, como evitá-lo?

Também quero aplicar a validação cruzada para meus modelos para determinar as melhores opções para gama e C (regularização). Meu plano é apenas tentar todas as combinações desses 10 valores: 0,00001, 0,0001, 0,001, 0,01, 0,1, 1, 10, 100, 1000, 10000 para ambos os parâmetros e ver qual combinação produz a melhor precisão durante a validação cruzada. Isso é suficiente? Devo usar mais valores nesse intervalo ou devo escolher um intervalo maior?

Mihai Todor
fonte
Experimente o modo NU_SVC, pois deve resolver seu problema.
Hosein Bitaraf

Respostas:

20

Este meio de aviso que a rotina iterativo usado por LIBSVM para resolver problema de otimização quadrática, a fim de encontrar o hiperplano margem máxima (ou seja, os parâmetros e ) que separa os seus dados atingiu o número máximo de iterações e terá de parar, enquanto a aproximação atual pois pode ser aprimorado ainda mais (ou seja, pode ser alterado para tornar o valor da função objetivo mais extremo). Em resumo, isso significa que o LIBSVM acha que não conseguiu encontrar o hiperplano de margem máxima, o que pode ou não ser verdadeiro.b wWbWW

Há muitas razões pelas quais isso pode acontecer, sugiro que você faça o seguinte:

  • Normalize seus dados.
  • Verifique se suas aulas são mais ou menos equilibradas (têm tamanho semelhante). Caso contrário, use o parâmetro -w para atribuir pesos diferentes.
  • Tente e . O kernel polinomial no LIBSVM também possui o parâmetro 'coef0', pois o kernel é Cγ
    γvocêv+coeff0 0 grau

É uma boa idéia pesquisar ideal em uma escala logarítmica, como você faz. Para os dados normalizados, acho que o intervalo de pesquisa para que você sugeriu deve estar OK. Uma verificação útil: a precisão do classificador não deve mudar muito nas bordas desse intervalo e entre dois valores do seu conjunto. Se isso acontecer, estenda o intervalo ou adicione valores intermediários.CCC

Observe que o LIBSVM distributivo para Windows deve conter um script Python chamado grid.py, que pode fazer a seleção de parâmetros para você (com base na validação cruzada e nos intervalos de pesquisa especificados). Também pode produzir gráficos de contorno para a precisão do SVM. Essa ferramenta pode ser bastante útil.

A seguinte pergunta no StackOverflow e suas perguntas relacionadas também podem ajudar: libsvm Shrinking Heuristics

Leo
fonte
Obrigado pela explicação detalhada. Definitivamente, esclarece o mistério. Fiz aproximadamente a mesma pergunta no SO (o link que você forneceu), mas a resposta que recebi foi focada principalmente nas heurísticas cada vez menores.
21712 Mihai Todor