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. P>
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. P>
J'ai essayé de modifier les paramètres de poids -w sans beaucoup de succès. P>
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? P>
4 Réponses :
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>
Vous devez transmettre les paramètres suivants sur SVM: P>
-w0 5 -w1 90 -w2 90
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?
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. P>
Minimiser l'AUC peut donner de meilleurs résultats que des exemples de formation à la ré-pondération. P>
Svmlight est hostile commercial-hostile; Ce n'est que gratuit pour une utilisation académique.
Vous pouvez optimiser l'une des précision, le rappel, le score F et l'AUC en utilisant grid.py code>. Tweak est que vous devez modifier la mesure d'évaluation de la validation croisée utilisée par
SVM-train code> dans libsvm. Suivez le Procédure donnée sur le site Web de Libsvm . P>
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 . P >
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. P>