Ich denke, dass M0rkHaV die richtige Idee hat. Scikit-Learn Pipeline - Klasse ist ein nützliches Werkzeug für die neben einem Schätzer zu einem Objekt mehrere verschiedene Transformatoren einkapseln, so dass Sie nur Ihre wichtigen Methoden einmal aufrufen müssen ( fit()
, predict()
usw.). Lassen Sie uns die beiden Hauptkomponenten aufschlüsseln:
Transformatoren sind Klassen, die sowohl fit()
als auch implementieren transform()
. Möglicherweise kennen Sie einige der sklearn-Vorverarbeitungstools wie TfidfVectorizer
und Binarizer
. Wenn Sie sich die Dokumente für diese Vorverarbeitungstools ansehen, werden Sie feststellen, dass beide Methoden implementiert sind. Was ich ziemlich cool finde, ist, dass einige Schätzer auch als Transformationsschritte verwendet werden können, z LinearSVC
.
Schätzer sind Klassen, die sowohl fit()
als als auch implementieren predict()
. Sie werden feststellen, dass viele der Klassifikatoren und Regressionsmodelle beide Methoden implementieren, und als solche können Sie problemlos viele verschiedene Modelle testen. Es ist möglich, einen anderen Transformator als endgültigen Schätzer zu verwenden (dh er muss nicht unbedingt implementiert predict()
, aber definitiv implementiert werden fit()
). Das bedeutet nur, dass Sie nicht anrufen können predict()
.
Was Ihre Bearbeitung betrifft: Lassen Sie uns ein textbasiertes Beispiel durchgehen. Mit LabelBinarizer möchten wir eine Liste von Beschriftungen in eine Liste von Binärwerten umwandeln.
bin = LabelBinarizer() #first we initialize
vec = ['cat', 'dog', 'dog', 'dog'] #we have our label list we want binarized
Wenn der Binarizer nun auf einige Daten angewendet wird, hat er eine Struktur namens classes_
, die die eindeutigen Klassen enthält, über die der Transformator "Bescheid weiß". Ohne fit()
den Binarizer aufzurufen, hat er keine Ahnung, wie die Daten aussehen, sodass ein Aufruf transform()
keinen Sinn ergibt. Dies gilt, wenn Sie die Liste der Klassen ausdrucken, bevor Sie versuchen, die Daten anzupassen.
print bin.classes_
Beim Versuch wird folgende Fehlermeldung angezeigt:
AttributeError: 'LabelBinarizer' object has no attribute 'classes_'
Aber wenn Sie den Binarizer auf die montieren vec
Liste setzen:
bin.fit(vec)
und versuche es erneut
print bin.classes_
Ich bekomme folgendes:
['cat' 'dog']
print bin.transform(vec)
Und jetzt, nach dem Aufruf von transform on the vec
wir Objekt aufgerufen haben, erhalten wir Folgendes:
[[0]
[1]
[1]
[1]]
Für Schätzer, die als Transformatoren verwendet werden, verwenden wir den DecisionTree
Klassifikator als Beispiel für einen Merkmalsextraktor. Entscheidungsbäume sind aus vielen Gründen großartig. Für unsere Zwecke ist es jedoch wichtig, dass sie Funktionen bewerten können, die der Baum für die Vorhersage als nützlich erachtet hat. Wenn Sie transform()
einen Entscheidungsbaum aufrufen , nimmt er Ihre Eingabedaten und findet heraus, was seiner Meinung nach die wichtigsten Funktionen sind. Sie können sich also vorstellen, Ihre Datenmatrix (n Zeilen mal m Spalten) in eine kleinere Matrix (n Zeilen mal k Spalten) umzuwandeln, in der die k Spalten die k wichtigsten Merkmale sind, die der Entscheidungsbaum gefunden hat.