Früher habe ich von Zeit zu Zeit die Pipeline von sklearn verwendet, aber als ich sie auf "pipe.fit_transform (X, y)" setzte, war ich neugierig, welche Art von Verarbeitung in der Pipeline durchgeführt wurde, also das offizielle Dokument ^ 1 und Ich beschloss, den Quellcode ^ 2 zu lesen und zu organisieren.
Darüber hinaus wird das Problembewusstsein, das ich hatte, im Kommentar des folgenden Codes beschrieben. Einige Leute denken vielleicht: "Es ist natürlich!", Aber ich war wirklich neugierig, also habe ich es nachgeschlagen.
#Problembewusstsein 1:In den Konverter einbauen_transform,Fit wird im Schätzer aufgerufen??
#Problembewusstsein 2:Was kann ich tun, wenn ich zu diesem Zeitpunkt Parameter an den Konverter oder Schätzer übergeben möchte? ??
#Problembewusstsein 3:Welche Anforderungen müssen erfüllt sein, wenn Sie einen eigenen Schätzer / Konverter installieren möchten???
pipe.fit(X, y)
#Problembewusstsein 4:In den Konverter einbauen_transform,Die Schätzeraufrufe sagen voraus??
pipe.predict(X)
Bei Verwendung eines Schätzers, der eine Klassifizierung und Regression in einem maschinellen Lernprojekt durchführt, wird häufig ein Transformator zusammen verwendet. Die Pipeline wird als eine Funktion bereitgestellt, die die Verarbeitung von der Datenkonvertierung zum Lernen / Schätzen als einen Schätzer integrieren kann.
Die Pipeline besteht aus einer Liste mit (Schlüssel-, Wert-) Tapples als Elementen. Übergeben Sie den Namen des Schätzers / Konverters im Schlüssel und das Objekt des Schätzers / Konverters im Wert als Schritte an die Pipeline. Ein Anwendungsbeispiel ist unten dargestellt.
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn import datasets
#Vorbereitung der Probendaten
iris = datasets.load_iris()
X, y = iris.data, iris.target
#Erstellen einer Pipeline
estimators = [('reduce_dim', PCA()), ('clf', SVC())]
pipe = Pipeline(steps=estimators)
#Lernen
pipe.fit(X, y)
#Prognose
pipe.predict(X)
Möglicherweise möchten Sie Ihren eigenen Schätzer / Konverter in die Pipeline aufnehmen. Beschreiben Sie die Anforderungen, die zu diesem Zeitpunkt erfüllt sein müssen. Die Anforderungen ändern sich am Ende der Pipeline-Schritte (final_estimator) oder am Ende anderer Schritte (not_final_estimator).
--final_estimator: Haben Sie eine Anpassungsmethode --not_final_estimator: Haben Fit- und Transformationsmethoden oder Fit_transform-Methoden
Abhängig von der von der Pipeline aufgerufenen Methode steigen die Anforderungen, die zu erfüllenden Mindestanforderungen liegen jedoch oben.
Wie im Code in 1.1 gezeigt, habe ich die Verarbeitung in der Pipeline beim Aufrufen von Pipeline.fit und Pipeline.predict ^ 3 überprüft. Die Methoden, die in der Pipeline häufig verwendet werden, sind nachstehend zusammengefasst. Von links die Pipeline-Methode, die an sie übergebenen Parameter, die Methode not_final_estimator und die Methode final_estimator.
pipeline | Parameter | not_final_estimator | final_estimator |
---|---|---|---|
fit | X, y=None, **fit_params | fit_transform | fit |
fit_transform | X, y=None, **fit_params | fit_transform | fit_transform |
predict | X, **predict_params | transform | predict |
fit_predict | X, y=None, **fit_params | fit_transform | fit_predict |
score | X, y=None, sample_weight=None | transform | score |
Die zu beachtenden Punkte sind unten aufgeführt.
--Wenn die Methode fit_transform nicht definiert ist, werden die Methoden fit und transform nacheinander ausgeführt.
Zielschrittname (Schlüsselteil des Taple) __ Parametername
übergeben werden.
--Beispiel: Pipeline.fit (X, y, key1__param1 = True)
Pipeline.predict (X, param1 = True)
Abgesehen davon sollte das sklearn-kompatible Modell nicht so ausgelegt sein, dass es Parameter akzeptiert, wenn die Anpassungsmethode ausgeführt wird. Daher ist es besser, die Übergabe von Parametern mit \ * \ * fit_params so weit wie möglich zu vermeiden. Das sklearn-kompatible Modell wird ausführlich in [hier] beschrieben (https://qiita.com/shota-imazeki/items/e09ea39660bb4d5d0a90).
Recommended Posts