google übersetzte http://scikit-learn.org/0.18/modules/pipeline.html [scikit-learn 0.18 Benutzerhandbuch 4. Datensatzkonvertierung](http://qiita.com/nazoking@github/items/267f2371757516f8c168#4-%E3%83%87%E3%83%BC%E3%82%BF % E3% 82% BB% E3% 83% 83% E3% 83% 88% E5% A4% 89% E6% 8F% 9B)
Mit der Pipeline (http://scikit-learn.org/0.18/modules/generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline) können Sie mehrere Schätzer zu einem kombinieren. Ich kann es schaffen Dies ist praktisch, da die Schritte zum Verarbeiten der Daten, wie z. B. Auswahl, Normalisierung und Klassifizierung von Merkmalen, häufig festgelegt sind. Die Pipeline dient hier zwei Zwecken.
Alle Schätzer in der Pipeline mit Ausnahme der letzten Pipeline müssen Transformatoren sein (erfordert die Transformationsmethode). Der endgültige Schätzer kann von einem beliebigen Typ sein (Konverter, Klassifizierer usw.).
Die Pipeline wird mithilfe einer Liste von "(Schlüssel, Wert)" - Paaren erstellt. key
ist die Namenszeichenfolge für diesen Schritt und value
ist die Schätzerinstanz.
>>> from sklearn.pipeline import Pipeline
>>> from sklearn.svm import SVC
>>> from sklearn.decomposition import PCA
>>> estimators = [('reduce_dim', PCA()), ('clf', SVC())]
>>> pipe = Pipeline(estimators)
>>> pipe
Pipeline(steps=[('reduce_dim', PCA(copy=True, iterated_power='auto',
n_components=None, random_state=None, svd_solver='auto', tol=0.0,
whiten=False)), ('clf', SVC(C=1.0, cache_size=200, class_weight=None,
coef0=0.0, decision_function_shape=None, degree=3, gamma='auto',
kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False))])
Die Dienstprogrammfunktion make_pipeline ist eine Abkürzung für das Erstellen einer Pipeline. Gibt eine Pipeline mit mehreren Schätzern als Argumente zurück. Der Name wird automatisch festgelegt:
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.naive_bayes import MultinomialNB
>>> from sklearn.preprocessing import Binarizer
>>> make_pipeline(Binarizer(), MultinomialNB())
Pipeline(steps=[('binarizer', Binarizer(copy=True, threshold=0.0)),
('multinomialnb', MultinomialNB(alpha=1.0,
class_prior=None,
fit_prior=True))])
Die Schätzer in der Pipeline werden als Liste im Attribut "Schritte" gespeichert.
>>> pipe.steps[0]
('reduce_dim', PCA(copy=True, iterated_power='auto', n_components=None, random_state=None,
svd_solver='auto', tol=0.0, whiten=False))
Auch als dict
to named_steps
:
>>> pipe.named_steps['reduce_dim']
PCA(copy=True, iterated_power='auto', n_components=None, random_state=None,
svd_solver='auto', tol=0.0, whiten=False)
Auf geschätzte Parameter in der Pipeline kann mit der Syntax <estimator> __ <parameter>
zugegriffen werden.
>>> pipe.set_params(clf__C=10)
Pipeline(steps=[('reduce_dim', PCA(copy=True, iterated_power='auto',
n_components=None, random_state=None, svd_solver='auto', tol=0.0,
whiten=False)), ('clf', SVC(C=10, cache_size=200, class_weight=None,
coef0=0.0, decision_function_shape=None, degree=3, gamma='auto',
kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False))])
Dies ist besonders wichtig bei der Rastersuche.
>>> from sklearn.model_selection import GridSearchCV
>>> params = dict(reduce_dim__n_components=[2, 5, 10],
... clf__C=[0.1, 10, 100])
>>> grid_search = GridSearchCV(pipe, param_grid=params)
Einzelne Schritte werden ebenfalls als Parameter ersetzt, nicht endgültige Schritte werden ignoriert und auf "Keine" gesetzt.
>>>
>>> from sklearn.linear_model import LogisticRegression
>>> params = dict(reduce_dim=[None, PCA(5), PCA(10)],
... clf=[SVC(), LogisticRegression()],
... clf__C=[0.1, 10, 100])
>>> grid_search = GridSearchCV(pipe, param_grid=params)
--Beispiel:
Das Aufrufen von "fit" in der Pipeline entspricht dem Aufrufen von "fit" für jeden Schätzer, wobei die Eingabe transformiert und an den nächsten Schritt übergeben wird. Die Pipeline verfügt über alle Methoden, über die der letzte Schätzer in der Pipeline verfügt. Das heißt, wenn der letzte Schätzer ein Klassifizierer ist, kann die Pipeline als Klassifizierer verwendet werden. Wenn der letzte Schätzer ein Konverter ist, ist dies auch die Pipeline.
FeatureUnion kombiniert mehrere Konverterobjekte mit ihrer Ausgabe. Mit einem neuen Konverter kombinieren. FeatureUnion erstellt eine Liste der Konverterobjekte. Während der Anpassung passt jede dieser Daten einzeln zu den Daten. Um die Daten zu transformieren, werden die Transformationen parallel angewendet und die von ihnen ausgegebenen Abtastvektoren werden Ende-zu-Ende in große Vektoren verkettet. FeatureUnion dient demselben Zweck wie Pipeline-Komfort und gemeinsame Parameterschätzung und -validierung. Sie können Feature Union und Pipelines kombinieren, um komplexe Modelle zu erstellen. (FeatureUnion kann nicht überprüfen, ob zwei Transformationen dasselbe Feature erzeugen. Nur wenn die Feature-Sets nicht verbunden sind, wird nur eine Union generiert und sichergestellt, dass der Anrufer dafür verantwortlich ist.)
FeatureUnions werden unter Verwendung einer Liste von (Schlüssel, Wert)
Paaren erstellt. Wobei "Schlüssel" der Name ist, den Sie der Konvertierung geben (er funktioniert nur als beliebige Zeichenfolge, Kennung). value
ist ein Schätzobjekt.
>>> from sklearn.pipeline import FeatureUnion
>>> from sklearn.decomposition import PCA
>>> from sklearn.decomposition import KernelPCA
>>> estimators = [('linear_pca', PCA()), ('kernel_pca', KernelPCA())]
>>> combined = FeatureUnion(estimators)
>>> combined
FeatureUnion(n_jobs=1, transformer_list=[('linear_pca', PCA(copy=True,
iterated_power='auto', n_components=None, random_state=None,
svd_solver='auto', tol=0.0, whiten=False)), ('kernel_pca',
KernelPCA(alpha=1.0, coef0=1, copy_X=True, degree=3,
eigen_solver='auto', fit_inverse_transform=False, gamma=None,
kernel='linear', kernel_params=None, max_iter=None, n_components=None,
n_jobs=1, random_state=None, remove_zero_eig=False, tol=0))],
transformer_weights=None)
Feature-Unions erfordern wie Pipelines keine explizite Benennung der Komponenten make_union Es gibt einen prägnanten Konstruktor namens .pipeline.make_union.
>>> combined.set_params(kernel_pca=None)
FeatureUnion(n_jobs=1, transformer_list=[('linear_pca', PCA(copy=True,
iterated_power='auto', n_components=None, random_state=None,
svd_solver='auto', tol=0.0, whiten=False)), ('kernel_pca', None)],
transformer_weights=None)
Ähnlich wie bei der Pipeline werden einzelne Schritte durch "set_params" ersetzt und ignoriert, wenn sie auf "None" gesetzt werden.
--Beispiel:
[scikit-learn 0.18 Benutzerhandbuch 4. Datensatzkonvertierung](http://qiita.com/nazoking@github/items/267f2371757516f8c168#4-%E3%83%87%E3%83%BC%E3%82%BF % E3% 82% BB% E3% 83% 83% E3% 83% 88% E5% A4% 89% E6% 8F% 9B)
© 2010 - 2016, Entwickler von Scikit-Learn (BSD-Lizenz).
Recommended Posts