Klassifikator für unsichere Klassenbezeichnungen


11

Angenommen, ich habe eine Reihe von Instanzen mit zugeordneten Klassenbezeichnungen. Es spielt keine Rolle, wie diese Instanzen gekennzeichnet wurden, sondern wie sicher ihre Klassenmitgliedschaft ist. Jeder Instanz gehört genau einer Klasse an. Angenommen, ich kann die Sicherheit jeder Klassenmitgliedschaft mit einem nominalen Attribut von 1 bis 3 quantifizieren (sehr sicher bis unsicher).

Gibt es eine Art Klassifikator, der ein solches Sicherheitsmaß berücksichtigt, und wenn ja, ist es im WEKA-Toolkit verfügbar?

Ich stelle mir vor, dass diese Situation ziemlich häufig auftritt, zum Beispiel wenn Fälle von Menschen klassifiziert werden, die nicht immer ganz sicher sind. In meinem Fall muss ich Bilder klassifizieren, und manchmal kann ein Bild zu mehr als einer Klasse gehören. In diesem Fall gebe ich der Klasse eine hohe Unsicherheit, klassifiziere sie aber dennoch mit nur einer Klasse.

Oder gibt es andere Ansätze für dieses Problem ohne einen speziellen Klassifikator? ZB nur "bestimmte" Klassifikationen für das Training nehmen? Ich befürchte, dass es in diesem Fall zu weiteren Fehlklassifizierungen kommen wird, da "Grenzfälle" nicht abgedeckt sind.


1
Gehört jeder Eintrag zu genau einer Klasse? Oder ist es möglich, dass ein Eintrag mit Sicherheit 1 zur Klasse 12 und mit Sicherheit 2 zur Klasse 34 gehört?
user31264

In diesem Fall gehört jeder Eintrag genau einer Klasse an.
wnstnsmth

Antworten:


8

Zunächst ist, wie @Marc Claesen bereits erklärte, die halbüberwachte Klassifizierung eine der Techniken, um die Situation zu bewältigen, in der Sie wissen, dass die Klassen wirklich unterschiedlich sind, aber nicht sicher sind, zu welcher Klasse der Fall tatsächlich gehört.

Es gibt jedoch auch verwandte Situationen, in denen die "Realität" nicht so klar ist und die Annahme, dass es wirklich unterschiedliche Klassen gibt, nicht erfüllt ist: Grenzfälle können eine "physische" Realität sein (siehe unten für Artikel über eine Anwendung) wo wir eine solche Bedingung erfüllt haben).

Es gibt eine entscheidende Annahme für halbüberwachte Klassifikatoren , die Sie sicherstellen müssen, dass sie erfüllt wird: die Annahme, dass im Merkmalsraum Klassengrenzen mit einer geringen Stichprobendichte einhergehen . Dies wird als Clusterannahme bezeichnet.
Selbst wenn die Ihren Daten zugrunde liegende Realität unterschiedliche Klassen aufweist, weist Ihr Datensatz möglicherweise überproportional viele Grenzfälle auf: z. B. wenn Ihre Klassifizierungstechnik auf die Klassifizierung schwieriger Fälle abzielt, während die klaren und einfachen Fälle nicht von Interesse sind und Ihre Trainingsdaten dies bereits widerspiegeln Lage.

nur "bestimmte" Klassifikationen für das Training nehmen? Ich befürchte, dass es in diesem Fall zu weiteren Fehlklassifizierungen kommen wird, da "Grenzfälle" nicht abgedeckt sind.

Ich stimme Ihnen voll und ganz zu, dass das Ausschließen der Grenzfälle oft eine schlechte Idee ist: Wenn Sie alle schwierigen Fälle entfernen, erhalten Sie ein künstlich einfaches Problem. IMHO ist es noch schlimmer, dass das Ausschließen von Grenzfällen normalerweise nicht mit dem Modelltraining aufhört, aber die Grenzfälle werden auch vom Testen ausgeschlossen, sodass das Modell nur mit einfachen Fällen getestet wird. Damit würden Sie nicht einmal merken, dass das Modell mit Grenzfällen nicht gut funktioniert.

Hier sind zwei Artikel, die wir über ein Problem geschrieben haben, das sich von Ihrem darin unterscheidet, dass in unserer Anwendung auch die Realität "gemischte" Klassen haben kann (eine allgemeinere Version Ihres Problems: Unsicherheit bei Referenzetiketten wird ebenfalls behandelt).

Die Links führen zu einer Projektseite eines R-Pakets, das ich für die Leistungsberechnungen entwickelt habe. Es gibt weitere Links sowohl zur offiziellen Webseite als auch zu meinen Manuskripten der Papiere. Obwohl ich Weka bisher noch nicht verwendet habe, verstehe ich, dass eine Schnittstelle zu R verfügbar ist .


praktische Überlegungen:

  • Der Copy-and-Label-Different-Ansatz ist zwar unkompliziert, funktioniert jedoch nicht mit allen Klassifizierern und Implementierungen in der Praxis. Zum Beispiel gibt es bei AFAIK keine Möglichkeit, der libSVMAbstimmung durch Kreuzvalidierung mitzuteilen, dass alle Kopien jedes Datenpunkts in derselben Kreuzvalidierungsfalte aufbewahrt werden müssen. Somit libSVMwürde eine Abstimmung wahrscheinlich ein massives Überanpassungsmodell ergeben.
  • Auch für die logistische Regression stellte ich fest, dass viele Implementierungen die von mir benötigten Teilmitgliedschaftsbezeichnungen nicht zuließen.
  • Die Implementierung, die ich für die obigen Arbeiten verwendet habe, ist eigentlich eine ANN ohne versteckte Schicht, die die Logistik als Sigmoidal Link-Funktion verwendet ( nnet::multinom).

Ihre erste praktische Überlegung trifft zwar zu, gilt jedoch nicht libsvminsbesondere. Die libsvmAutoren bieten eine alternative Version jeder Version an, in der eine instanzgewichtete Klassifizierung möglich ist, um dieses Problem insgesamt zu vermeiden. Es sind diese Dinge, die mich dazu bringen, Algorithmusbibliotheken im Allgemeinen direkt zu verwenden, anstatt Wrapper wie Weka / scipy / ... csie.ntu.edu.tw/~cjlin/libsvmtools/#weights_for_data_instances
Marc Claesen

@MarcClaesen: danke - das hatte ich nicht gesehen. Aber müssten Sie nicht zwei Instanzen desselben Falls angeben, eine mit 1/3 Klasse A und die andere mit 2/3 Klasse B? In jedem Fall wird die Abstimmung weniger problematisch, wenn nicht viele Kopien der eindeutigen Fälle bereitgestellt werden müssen (für meine Daten muss ich die Abstimmungsaufteilungen sowieso extern vornehmen, da ich eine "hierarchische" Datenstruktur mit mehreren Messungen der tatsächlichen Fälle habe )
cbeleites unglücklich mit SX

@cbeiteles Wenn eine Instanz zu mehreren Klassen gehören kann, müssen Sie sie auch bei dieser Instanzgewichtung tatsächlich mehrmals bereitstellen. Ich hatte diese Möglichkeit nicht in Betracht gezogen.
Marc Claesen

6

Dies ist eine der Verallgemeinerungen der Klassifizierung, die im halbüberwachten Lernen behandelt werden. Wenn Sie ein Maß für die Sicherheit haben, können Sie Ansätze verwenden, die die Gewichtung von Trainingsinstanzen ermöglichen. Je höher die Sicherheit, desto größer das entsprechende Instanzgewicht. Beispiele für solche Ansätze sind instanzgewichtete SVM und logistische Regression.

Ich bin sicher, dass weka Implementierungen dieser Algorithmen hat. Wenn alles andere fehlschlägt, testen Sie mehrere Instanzen mit hoher Sicherheit aus den Instanzen. Sie können diesen Ansatz für herkömmliche SVM oder LR verwenden.

Beispiel: SVM

Wenn ich mich nicht irre, hat weka Schnittstellen zu LIBSVM . Mit LIBSVM können Sie klassengewichtete SVM in allen Versionen und instanzgewichtete SVM in speziellen Versionen jeder Version lösen. Ich gehe davon aus, dass Weka Letzteres nicht unterstützt (was Sie brauchen).

minw,ξw2+CposiPξi+CnegiNξi,
wξPNCposCneg

Basierend auf Ihrer Frage scheint es, als würden Sie idealerweise 6 verschiedene Gewichte verwenden wollen (2 Klassen 3 Sicherheitsstufen). Sie können dies für viele Ansätze erreichen, indem Sie Stichproben der Punkte mit hoher Sicherheit duplizieren.×

In Bezug auf SVM ergibt die zweimalige Verwendung derselben Dateninstanz beispielsweise eine identische Lösung für die Verdoppelung des zugehörigen Werts. Dies ist eine sehr einfache Möglichkeit, bestimmten Dateninstanzen hohe Strafen für Fehlklassifizierungen zuzuweisen. Sie können den gleichen Ansatz für die logistische Regression verfolgen.C


(+1) das ist es! Durch das Duplizieren von Instanzen mit unterschiedlichen Bezeichnungen und Instanzgewichten (auch als Label-Gewissheiten bezeichnet) können auch Algorithmen wie Random Forests, Naive Bayes usw. angewendet werden. Instanzgewichte sind so häufig, dass Weka Lernende haben muss, die dies unterstützen. Rapidminer (Konkurrent von weka) tut es. Wenn Sie die Sicherheit auf 1 setzen, können Sie sogar "knackige" Multi-Label-Probleme modellieren.
steffen

Sie haben Recht, WEKA unterstützt LIBSVM, aber keine Instanzgewichtung, afaik. Die Idee, Instanzen zu duplizieren, ist meiner Meinung nach sehr gut, insbesondere weil jeder "traditionelle" Lernende damit umgehen kann.
wnstnsmth

2

Die Schwierigkeit des Problems hängt stark davon ab, wie fehlerhaft die unsicheren Beschriftungen sein können. Wenn die unsicheren Bezeichnungen beispielsweise in 90% der Fälle richtig sind, können Sie wahrscheinlich nur mit logistischer Regression davonkommen. Wenn die Beschriftungen jedoch fast die Hälfte der Zeit falsch sind, müssen Sie möglicherweise auf einige spezielle Techniken zurückgreifen. Hier ist ein Stich, den ich bei einem sehr ähnlichen Problem gemacht habe. (Wir hatten mehrere Beobachtungen pro Etikett, aber ansonsten ist das Setup ziemlich ähnlich.)


-5

Ich hatte einen kurzen Einblick in die Bilderkennung und -klassifizierung.

Random Forests ist eine einfach zu verwendende Technik. Ich habe es auf R implementiert, es sollte auch auf Weka verfügbar sein. Die Benutzerfreundlichkeit übertrifft jedoch die Vorhersagegenauigkeit. Wenn Sie über ein ausreichend großes Trainingsset verfügen, können mehrere Labels klassifiziert werden.

Es hat funktioniert, um handgeschriebene Ziffern recht gut zu erkennen, aber wenn Ihre Bilder komplexer sind, würde Ihnen nur ein Versuch sagen, ob es gut funktioniert.


4
Was hat das mit unsicheren Klassenlabels zu tun?
wnstnsmth
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.