SVM pour les données asymétriques

15

Je souhaite essayer d'utiliser les machines à vecteurs de support (SVM) sur mon jeu de données. Avant d'essayer le problème, j'ai été averti que les SVM ne fonctionnaient pas bien sur des données extrêmement déséquilibrées. Dans mon cas, je peux avoir jusqu'à 95-98% 0 et 2-5% 1.

J'ai essayé de trouver des ressources qui parlaient de l'utilisation de SVM sur des données éparses / déséquilibrées, mais tout ce que j'ai pu trouver était des «sparseSVM» (qui utilisent une petite quantité de vecteurs de support).

J'espérais que quelqu'un pourrait expliquer brièvement:

  1. Dans quelle mesure SVM devrait-il faire avec un tel ensemble de données
  2. Le cas échéant, les modifications doivent être apportées à l'algorithme SVM
  3. Quelles ressources / documents en discutent
DankMasterDan
la source

Réponses:

15

De nombreuses implémentations SVM résolvent ce problème en attribuant des poids différents aux instances positives et négatives. Essentiellement, vous pesez les échantillons afin que la somme des poids des positifs soit égale à celle des négatifs. Bien sûr, dans votre évaluation du SVM, vous devez vous rappeler que si 95% des données sont négatives, il est trivial d'obtenir une précision de 95% en prédisant toujours négatif. Vous devez donc vous assurer que vos mesures d'évaluation sont également pondérées afin qu'elles soient équilibrées.

Plus précisément dans libsvm, que vous avez ajouté en tant que balise, il y a un indicateur qui vous permet de définir les poids de classe ( -wje crois, mais vérifiez les documents ).

Enfin, par expérience personnelle, je peux vous dire que je trouve souvent qu'un SVM donnera des résultats très similaires avec ou sans la correction de poids.

Au niveau du bit
la source
Battez-moi :-)
Marc Claesen
@Bitwise j'ai le même problème de données déséquilibrées et j'obtiens une précision de 99%. J'ai utilisé les poids dans libsvm. Vous avez mentionné que les paramètres d'évaluation doivent également être pondérés. Je voulais savoir comment pondérer les mesures d'évaluation.
Hani Goc
1
@HaniGoc fondamentalement, vous voulez calculer séparément la précision de chaque classe et prendre la moyenne de cela. Ainsi , par exemple, si vous avez 10 classe A et 90 classe B et vous deviné tous les échantillons d'être classe B, la précision standard , vous auriez , mais la précision pondérée que vous auriez 0,5 * ( 0 / 10 + 90 / 90 ) = 0,5 . 90/100=0,90,5(0/dix+90/90)=0,5
Bitwise
7

Les SVM fonctionnent bien sur des données éparses et déséquilibrées. Le SVM pondéré en fonction de la classe est conçu pour traiter les données déséquilibrées en affectant des pénalités de classification plus élevées aux instances de formation de la classe minoritaire.

Marc Claesen
la source
5

Dans le cas de données rares comme celle-ci, SVM fonctionnera bien.

Comme indiqué par @Bitwise, vous ne devez pas utiliser la précision pour mesurer les performances de l'algorithme.

Au lieu de cela, vous devez calculer la précision, le rappel et le score F de l'algorithme.

alexandrekow
la source
Pouvez-vous développer votre raisonnement? De plus, comment procéderiez-vous pour mesurer le score F une fois la classification (sur le test) terminée? Merci
Spacey
Pour mesurer le FScore sur l'ensemble de test, vous devrez le classer manuellement, puis calculer le rappel et la précision en utilisant les données manuelles par rapport aux données prédites. Que voudriez-vous que j'élargisse, pourquoi SVM fonctionne bien avec des données éparses?
alexandrekow
Oui, pourquoi SVM fonctionne sur des données clairsemées serait bien aussi. Merci
Spacey
"Le simple fait d'avoir des fonctionnalités clairsemées ne présente aucun problème pour le SVM. Une façon de voir cela est que vous pourriez faire une rotation aléatoire des axes de coordonnées, ce qui laisserait le problème inchangé et donnerait la même solution, mais rendrait la données complètement non clairsemées (c'est en partie comment fonctionnent les projections aléatoires "( stats.stackexchange.com/questions/23470/… )
alexandrekow