Scikit-learn: Woher weiß ich, welche Funktion von FeatureUnion ausgewählt wird?

Erstellt am 6. Jan. 2016  ·  4Kommentare  ·  Quelle: scikit-learn/scikit-learn

Ich führe den Code von aus,
http://scikit-learn.org/stable/auto_examples/feature_stacker.html#example -feature-stacker-py
und mit folgendem Code

# Build estimator from PCA and Univariate selection:
combined_features = FeatureUnion([("pca", pca), ("univ_select", selection)])

# Use combined features to transform dataset:
X_features = combined_features.fit(X, y).transform(X)

Wenn Daten in FeatureUnion eingegeben werden, möchte ich wissen, welche Funktion ausgewählt ist. In der Dokumentation von FeatureUnion gibt es eine Funktion get_feature_names() , die alle Namen von allen Transformatoren erhält. Rufen Sie also einfach diese Funktion auf und erhalten Sie einen Fehler wie diesen,

AttributeError: Transformer pca does not provide get_feature_names.

Eigentlich weiß ich, dass PCA keine Funktion wie diese hat. aber warum bietet FeatureUnion diese Funktion!?

Hilfreichster Kommentar

Dies behebt Ihr spezielles Problem mit PCA möglicherweise nicht direkt, aber wenn ich Ihre Frage richtig gelesen habe, fragen Sie sich im Allgemeinen, wie Attribute durch die benutzerdefinierte Pipeline perkoliert werden können.

Zu spät zur Party, aber Sie können auf Elemente innerhalb der Pipeline zugreifen, egal wie kompliziert, indem Sie durch die Pipelinestruktur gehen, den entsprechenden Schritt finden (sogar innerhalb von featureunion) und dann das entsprechende Attribut verwenden. Hier ist ein Beispiel, das ich gerade ausgeführt habe:

pipeline = Pipeline([ ('union', FeatureUnion([ ('categoric', Pipeline([ ('f_cat', feature_type_split(type = 'categoric')), #returns categoric in array for vect ('vect', vect), ])), ('numeric', Pipeline([ ('f_num', feature_type_split(type = 'numeric')), ])), ])), ('select', ff), ('tree_clf', clf), ])

Das Anzeigen des Pipeline-Objekts selbst über print(pipeline) gibt mir einen Bezugspunkt:

Pipeline(steps=[('union', FeatureUnion(n_jobs=1, transformer_list=[('categoric', Pipeline(steps=[('f_cat', feature_type_split(type='categoric')), ('vect', DictVectorizer(dtype=<type 'numpy.float64'>, separator='=', sort=True, sparse=True))])), ('numeric', Pipeline(steps=[('f_num', feature_type...it=2, min_weight_fraction_leaf=0.0, presort=False, random_state=None, splitter='best'))])

Also gehe ich zum Gewerkschaftsschritt über:

pipeline.named_steps['union']

Gehen Sie dann zur nächsten Ebene, die transformator_list (oder die kategorische Pipeline) ist, über:

pipeline.named_steps['union'].transformer_list[0]

Gehen Sie dann zur nächsten Ebene, bei der es sich um die Schritte innerhalb der kategorischen Pipeline handelt, über:

pipeline.named_steps['union'].transformer_list[0][1]

Das obige gibt eine typische Pipeline-Struktur aus, in der wir jetzt named_steps verwenden können:
print pipeline.named_steps['union'].transformer_list[0][1].named_steps['vect']

Greifen Sie daher auf das Attribut zu, das wir benötigen, über:
print pipeline.named_steps['union'].transformer_list[0][1].named_steps['vect'].get_feature_names()

TLDR;
Gehen Sie mit Ihrer benutzerdefinierten Pipeline Stück für Stück durch die Pipelinestruktur und greifen Sie dann auf das Attribut zu, wie Sie es normalerweise für dieses Transformations-/Estimator-Stück tun würden.

Alle 4 Kommentare

Ich stimme zu, dass es eine Möglichkeit geben sollte, zu sehen, welche Funktionen zu welchen gehören
Komponenten, und ich habe dies vor langer Zeit vorgeschlagen, aber ich glaube nicht, dass es so ist
aktuell möglich.

Am 6. Januar 2016 um 18:23 schrieb genliu777 [email protected] :

Ich führe den Code von aus,

http://scikit-learnorg/stable/auto_examples/feature_stackerhtml#example -feature-stacker-py
und mit folgendem Code

Schätzer aus PCA und univariater Auswahl erstellen:

Combined_features = FeatureUnion([("pca", pca), ("univ_select", Auswahl)])

Verwenden Sie kombinierte Features, um das Dataset zu transformieren:

X_features = kombinierte_featuresfit(X, y)transform(X)

Wenn Daten in FeatureUnion eingegeben werden, möchte ich wissen, welche Funktion ausgewählt ist
im doc von FeatureUnion gibt es eine Funktion get_feature_names() welche
erhält alle Namen von allen Transformatoren, also rufen Sie einfach diese Funktion auf
und bekomme Fehler wie diesen,
AttributeError: Transformer pca stellt get_feature_names nicht bereit
Eigentlich weiß ich, dass PCA keine Funktion wie diese hat, aber warum FeatureUnion
Bieten Sie diese Funktion an!?


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/scikit-learn/scikit-learn/issues/6122.

warum derzeit unmöglich!? Wissen Sie, FeatureUnion gibt die Funktion get_feature_names() , und es sollte auch funktionieren!

wie vielleicht alle Modelle in sklearn die Funktion fit und transform haben, sollten alle Modelle, die in FeatureUnion eingefügt werden können und gut funktionieren, das Attribut als Quelle bereitstellen Code von get_feature_names() ruft if not hasattr(trans, 'get_feature_names'): . Andernfalls bietet FeatureUnion nicht unbedingt die Funktion von get_feature_names() !!

Dies behebt Ihr spezielles Problem mit PCA möglicherweise nicht direkt, aber wenn ich Ihre Frage richtig gelesen habe, fragen Sie sich im Allgemeinen, wie Attribute durch die benutzerdefinierte Pipeline perkoliert werden können.

Zu spät zur Party, aber Sie können auf Elemente innerhalb der Pipeline zugreifen, egal wie kompliziert, indem Sie durch die Pipelinestruktur gehen, den entsprechenden Schritt finden (sogar innerhalb von featureunion) und dann das entsprechende Attribut verwenden. Hier ist ein Beispiel, das ich gerade ausgeführt habe:

pipeline = Pipeline([ ('union', FeatureUnion([ ('categoric', Pipeline([ ('f_cat', feature_type_split(type = 'categoric')), #returns categoric in array for vect ('vect', vect), ])), ('numeric', Pipeline([ ('f_num', feature_type_split(type = 'numeric')), ])), ])), ('select', ff), ('tree_clf', clf), ])

Das Anzeigen des Pipeline-Objekts selbst über print(pipeline) gibt mir einen Bezugspunkt:

Pipeline(steps=[('union', FeatureUnion(n_jobs=1, transformer_list=[('categoric', Pipeline(steps=[('f_cat', feature_type_split(type='categoric')), ('vect', DictVectorizer(dtype=<type 'numpy.float64'>, separator='=', sort=True, sparse=True))])), ('numeric', Pipeline(steps=[('f_num', feature_type...it=2, min_weight_fraction_leaf=0.0, presort=False, random_state=None, splitter='best'))])

Also gehe ich zum Gewerkschaftsschritt über:

pipeline.named_steps['union']

Gehen Sie dann zur nächsten Ebene, die transformator_list (oder die kategorische Pipeline) ist, über:

pipeline.named_steps['union'].transformer_list[0]

Gehen Sie dann zur nächsten Ebene, bei der es sich um die Schritte innerhalb der kategorischen Pipeline handelt, über:

pipeline.named_steps['union'].transformer_list[0][1]

Das obige gibt eine typische Pipeline-Struktur aus, in der wir jetzt named_steps verwenden können:
print pipeline.named_steps['union'].transformer_list[0][1].named_steps['vect']

Greifen Sie daher auf das Attribut zu, das wir benötigen, über:
print pipeline.named_steps['union'].transformer_list[0][1].named_steps['vect'].get_feature_names()

TLDR;
Gehen Sie mit Ihrer benutzerdefinierten Pipeline Stück für Stück durch die Pipelinestruktur und greifen Sie dann auf das Attribut zu, wie Sie es normalerweise für dieses Transformations-/Estimator-Stück tun würden.

Bitte versuchen Sie es eli5 's transform_feature_names , das in Fällen funktionieren kann, in denen get_feature_names scikit-learn nicht funktioniert.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen