2012-05-01 6 views
2

J'ai un ensemble de données d'entraînement (texte) pour une catégorie particulière (disons Cancer). Je veux former un classificateur SVM pour cette classe dans weka. Mais quand j'essaye de faire ceci en créant un dossier «cancer» et en mettant tous ces dossiers de formation dans ce dossier et quand je cours au code j'obtiens l'erreur suivante: weka.classifiers.functions.SMO: Ne peut pas manipuler la classe unaire! Ce que je veux faire est que si le classificateur trouve un document lié au 'cancer', il dit correctement le nom de la classe et une fois que j'ai nourri un document non cancéreux, il devrait dire quelque chose comme 'inconnu'.classification unaire classe de texte dans weka?

Que dois-je faire pour obtenir ce comportement?

Répondre

7

L'algorithme SMO dans Weka ne fait que la classification binaire entre deux classes. L'optimisation minimale séquentielle est un algorithme spécifique pour résoudre un SVM et dans Weka une implémentation de base de cet algorithme. Si vous avez des exemples de cancer et d'autres qui ne le sont pas, alors ce serait binaire, peut-être que vous ne les avez pas étiquetés correctement. Cependant, si vous utilisez des données d'entraînement qui sont toutes des exemples de cancer et que vous voulez qu'elles vous indiquent si un exemple futur correspond ou non au modèle, alors vous essayez d'effectuer une détection des valeurs aberrantes SVM.

LibSVM in Weka peut gérer svm one-class. Contrairement à la mise en œuvre Weka SMO, LibSVM est un programme autonome qui a été interfacé dans Weka et intègre de nombreuses variantes de SVM. This post sur le Wekalist explique comment utiliser LibSVM pour cela dans Weka.

+0

Merci pour votre réponse. Je l'ai fait fonctionner. Quelle est la différence entre avoir deux séries (disons cancer et non-cancer) et faire une classification binaire et avoir un seul ensemble (cancer seulement) et faire une classification d'une classe, si je veux seulement déterminer combien de documents pertinents pour le cancer (une classe)? – KillBill

+0

La différence est de savoir si vous avez des exemples négatifs. Si vous avez 100 exemples de cancer et 100 exemples non cancéreux, alors il y a deux classes, cancer et non cancer. Si vous n'avez que 100 exemples sains et que vous voulez savoir si quelque chose est anormal, alors c'est une classe. – karenu

+0

J'ai fait une formation d'une classe avec le LibSVM à Weka. Mais le problème est lors des tests, toutes les instances de test sont classées dans la classe que j'ai utilisée en formation, il ne dit pas au moins une seule instance non pertinente dont je suis sûr que les instances de test sont totalement hors de propos. Quelle pourrait en être la raison? – KillBill

Questions connexes