7
votes

Utiliser libsvm grid.py pour des données déséquilibrées?

J'ai un problème de trois classes avec des données déséquilibrées (90%, 5%, 5%). Maintenant, je veux former un classificateur en utilisant libsvm.

Le problème est que libsvm optimise son paramètre gamma et le coût de précision optimale, ce qui signifie que 100% des exemples sont classés comme classe 1, ce qui n'est bien sûr pas ce que je veux.

J'ai essayé de modifier les paramètres de poids -w sans beaucoup de succès.

Alors, ce que je veux, c'est modifier la grille.py d'une manière qu'il optimise le coût et la gamma pour la précision et le rappel séparé par des classes plutôt que pour une précision globale. Y'a-t'il un quelconque moyen d'y arriver? Ou existe-t-il d'autres scripts qui peuvent faire quelque chose comme ça?


0 commentaires

4 Réponses :


8
votes

Le paramètre -W est ce dont vous avez besoin pour des données déséquilibrées. Qu'avez-vous essayé jusqu'à présent?

Si vos classes sont: p>

  • Classe 0: 90% Li>
  • classe 1: 5% li>
  • classe 2: 5% li> ul>

    Vous devez transmettre les paramètres suivants sur SVM: P>

    -w0 5 -w1 90 -w2 90
    


3 commentaires

Merci, mais je pense que cela devrait être l'inverse: -w0 5 -w1 90 -W2 90, puisque la classe plus petite devrait avoir plus de coûts associés à eux. Celui-ci a aidé!


Oui, je pense que tu as raison. Je viens de modifier ma question. Merci!


Et lorsque vous avez plus de 3 classes, comment pouvez-vous attribuer la valeur de chaque w?



4
votes

Si vous voulez essayer une alternative, l'un des programmes de la famille SvMlight, http://www.cs.cornell.edu/people/tj/svm_light/svm_rank.html , minimise directement la zone sous la courbe ROC.

Minimiser l'AUC peut donner de meilleurs résultats que des exemples de formation à la ré-pondération.


1 commentaires

Svmlight est hostile commercial-hostile; Ce n'est que gratuit pour une utilisation académique.



0
votes

Vous pouvez optimiser l'une des précision, le rappel, le score F et l'AUC en utilisant grid.py . Tweak est que vous devez modifier la mesure d'évaluation de la validation croisée utilisée par SVM-train dans libsvm. Suivez le Procédure donnée sur le site Web de Libsvm .


0 commentaires

0
votes

Si vous avez des données déséquilibrées, vous ne devriez probablement pas optimiser la précision. Optimiser plutôt F-score (ou rappel, si cela est plus important pour vous). Vous pouvez modifier la fonction d'évaluation comme décrit ici .

Je pense que vous devez également optimiser le gamma et le coût, tout en utilisant des configurations de poids de classe différentes. J'ai modifié la fonction "get_cmd" dans Grid.py en passant des poids de classe différente à cette fin (-WI Poids). D'après mon expérience, la pondération de la classe ne vous aide pas toujours.


0 commentaires