Was ist der Unterschied zwischen OneVsRestClassifier und MultiOutputClassifier in scikit lernen?
Kann mir bitte jemand erklären (mit Beispiel vielleicht), was ist der Unterschied zwischen OneVsRestClassifier und MultiOutputClassifier in scikit-learn?
Ich habe gelesen, Dokumentation und ich habe verstanden, dass wir verwenden:
- OneVsRestClassifier - wenn wir wollen, zu tun multiclass-oder multilabel-Klassifizierung, und es ist die Strategie besteht aus passend für einen Klassifikator pro Klasse. Für jeden Klassifikator, der Klasse angebracht ist gegen alle anderen Klassen. (Dies ist ziemlich klar, und es bedeutet, dass problem der multiclass/multilabel-Klassifikation unterteilt in mehrere binäre Klassifikation von Problemen).
- MultiOutputClassifier - wenn wir wollen, zu tun multi-target-Klassifizierung (was ist das?) und es ist die Strategie besteht aus passend für einen Klassifikator pro Ziel (was bedeutet target bedeutet es?)
Hab ich auch schon benutzt OneVsRestClassifier für multilabel-Klassifizierung, und ich kann verstehen, wie es funktioniert, aber dann fand ich MultiOutputClassifier und kann nicht verstehen, wie funktioniert es anders aus OneVsRestClassifier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Multiclass Klassifizierung
Zur besseren Veranschaulichung der Unterschiede, lassen Sie uns annehmen, dass Ihr Ziel ist es, dass bei der Klassifizierung von Fragen in
n_classes
verschiedene, sich gegenseitig ausschließende Klassen. Aus Gründen der Einfachheit in diesem Beispiel werden wir nur berücksichtigen, vier Klassen, nämlich'Python'
,'Java'
,'C++'
und'Other language'
. Lassen Sie uns annehmen, dass Sie einen Datensatz gebildet von nur sechs Fragen, und die Klasse Etiketten diese Fragen werden in einem array gespeicherteny
wie folgt:Die oben beschriebene situation ist in der Regel bezeichnet als multiclass Klassifizierung (auch bekannt als multinomial-Klassifikation). Um der Systematik und Validierung des Modells durch die scikit-learn Bibliothek, die Sie transformieren müssen Sie die text-class-labels in die numerische labels. Um dies zu erreichen, könnten Sie LabelEncoder:
Dies ist, wie die Etiketten Ihrer Daten codiert werden:
wo diese zahlen bezeichnen die Indizes der folgenden array:
Ein wichtiger Sonderfall ist, wenn es nur zwei Klassen, d.h.
n_classes = 2
. Dies ist in der Regel genannt binäre Klassifikation.Multilabel-Klassifizierung
Lassen Sie uns nun annehmen, die Sie ausführen möchten wie multiclass Klassifizierung mit einem pool von
n_classes
binäre Klassifikatoren, wirdn_classes
die Anzahl der verschiedenen Klassen. Jede dieser binären Klassifizierer macht eine Entscheidung darüber, ob ein Element einer bestimmten Klasse ist oder nicht. In diesem Fall können Sie encode-class-labels wie ganze zahlen von0
zun_classes - 1
Sie müssen zum erstellen einer 2-dimensionalen matrix-Anzeige statt. Bedenken Sie, dass sample -n
ist Klassek
. Dann, die[n, k]
Eintrag der Indikator-matrix ist1
und den rest der Elemente in der Zeilen
sind0
. Es ist wichtig zu beachten, dass, wenn die Klassen sich nicht gegenseitig ausschließen, kann es mehrere1
's in einer Zeile. Dieser Ansatz ist benannt multilabel-Klassifizierung und kann leicht durchgeführt werden durch MultiLabelBinarizer:Die Anzeige sieht wie folgt aus:
und die Spalte mit zahlen, wo
1
's sind eigentlich Indizes dieses Arrays:Multioutput-Klassifikation
Was ist, wenn Sie zu klassifizieren eine bestimmte Frage ALSO nach zwei verschiedenen Kriterien gleichzeitig, z.B. Sprache und Anwendung? In diesem Fall haben Sie zu tun beabsichtigen multioutput-Klassifikation. Der Einfachheit halber werde ich nur die drei Anwendungsklassen, nämlich
'Computer Vision'
,'Speech Processing
' und'Other application
'. Die label-array dataset sollte 2-dimensional:Wieder, wir müssen zu transformieren text-class-labels in numerische labels. Soweit ich weiß, diese Funktionalität ist nicht implementiert in scikit-learn und doch, so müssen Sie Ihren eigenen code schreiben. Dieser thread beschreibt einige clevere Möglichkeiten, das zu tun, aber für die Zwecke dieses Beitrags werden die folgenden Einzeiler sollte genügen:
Den codierten Etiketten wie folgt Aussehen:
Und die Bedeutung der Werte in jeder Spalte abgeleitet werden kann aus den folgenden Feldern: