SVM para dados não balanceados

15

Quero tentar usar SVMs (Support Vector Machines) no meu conjunto de dados. Antes de tentar o problema, fui avisado de que os SVMs não apresentam bom desempenho em dados extremamente desequilibrados. No meu caso, posso ter entre 95 e 98% de 0 e 2-5% de 1.

Tentei encontrar recursos que falassem sobre o uso de SVMs em dados esparsos / desequilibrados, mas tudo o que pude encontrar foram 'sparseSVMs' (que usam uma pequena quantidade de vetores de suporte).

Eu esperava que alguém pudesse explicar brevemente:

  1. Quão bem seria esperado do SVM com esse conjunto de dados
  2. Quais modificações, se houver, devem ser feitas no algoritmo SVM
  3. Que recursos / documentos discutem isso
DankMasterDan
fonte

Respostas:

15

Muitas implementações do SVM resolvem isso atribuindo pesos diferentes a instâncias positivas e negativas. Basicamente, você pesa as amostras para que a soma dos pesos dos positivos seja igual à dos negativos. Obviamente, na sua avaliação do SVM, você deve se lembrar que, se 95% dos dados forem negativos, é trivial obter 95% de precisão sempre prevendo negativo. Portanto, você deve garantir que suas métricas de avaliação também sejam ponderadas para que sejam equilibradas.

Especificamente em libsvm, que você adicionou como tag, há um sinalizador que permite definir os pesos das classes ( -wacredito, mas verifique os documentos ).

Por fim, por experiência pessoal, posso dizer que muitas vezes acho que um SVM produzirá resultados muito semelhantes com ou sem a correção de peso.

Bit a bit
fonte
Bata-me a ele :-)
Marc Claesen
@ Bitwise Eu tenho o mesmo problema de dados desequilibrados e obtenho uma precisão de 99%. Eu usei os pesos na libsvm. Você mencionou que as métricas de avaliação também devem ser ponderadas. Eu queria saber como podemos ponderar as métricas de avaliação.
Hani Goc 17/05
11
90/100=0.90.5(0/10+90/90)=0.5
7

Os SVMs funcionam bem com dados esparsos e desequilibrados. O SVM ponderado por classe foi desenvolvido para lidar com dados desequilibrados, atribuindo penalidades mais altas de classificação incorreta a instâncias de treinamento da classe minoritária.

Marc Claesen
fonte
5

No caso de dados esparsos como esse, o SVM funcionará bem.

Conforme declarado pelo @Bitwise, você não deve usar a precisão para medir o desempenho do algoritmo.

Em vez disso, você deve calcular a precisão, recall e F-Score do algoritmo.

alexandrekow
fonte
Você pode, por favor, expandir seu raciocínio? Além disso, como você mede o escore F depois que a classificação (no conjunto de testes) é concluída? Obrigado
Spacey
Para medir o FScore no conjunto de testes, será necessário classificá-lo manualmente e depois calcular a recuperação e a precisão usando os dados manuais versus os dados previstos. O que você gostaria que eu expandisse, por que o SVM funciona bem com dados esparsos?
Alexandrekow
Sim, por que o SVM funciona com dados esparsos também seria bom. Obrigado
Spacey
"Simplesmente ter recursos esparsos não apresenta nenhum problema para o SVM. Uma maneira de ver isso é que você poderia fazer uma rotação aleatória dos eixos coordenados, o que deixaria o problema inalterado e forneceria a mesma solução, mas tornaria o dados completamente não-esparsos (isto é, em parte como projeções aleatórios trabalhar"( stats.stackexchange.com/questions/23470/... )
alexandrekow