2017-06-21 3 views
0

Ich bin von diesem Code-Schnipsel auf die Spaltennamen versuchen:Python - sklearn Pipeline SVC f_regression - Spaltennamen erhalten

anova_filter = SelectKBest(f_regression, k=10) 
clf = svm.SVC(kernel='linear') 
anova_svm = make_pipeline(anova_filter, clf) 
f_reg_features = anova_svm.fit(df_train, df_train_y) 

ich versucht, einige andere Vorschläge wie dieser, aber ich war nicht in der Lage zu bekommen es funktioniert:

How to get feature names selected by feature elimination in sklearn pipeline?

Vielen Dank im Voraus.

+0

Also, Sie möchten die Funktionen aus dem SelectKBest erhalten, die auf dem SVM übergeben werden? –

+0

Richtig, aber ich konnte keine anderen Methoden zum Laufen bringen. – dasvootz

+1

Was ist mit 'df_train.columns [anova_svm.steps [0] [1] .get_support()]' –

Antwort

1

Mit eli5 Bibliothek (Disclaimer: Ich bin einer der Autoren) Sie es wie folgt tun:

# the original example: 
from sklearn.feature_selection import SelectKBest, f_regression 
from sklearn import svm 
from sklearn.datasets import make_classification 
from sklearn.pipeline import make_pipeline 
import pandas as pd 

X, y = make_classification(n_features=5, n_informative=5, n_redundant=0) 
df_train = pd.DataFrame(X, columns=['A', 'B', 'C', 'D', 'E']) 
df_train_y = pd.DataFrame(y) 

anova_filter = SelectKBest(f_regression, k=3) 
clf = svm.SVC(kernel='linear') 
anova_svm = make_pipeline(anova_filter, clf) 
f_reg_features = anova_svm.fit(df_train, df_train_y) 

und dann:

import eli5 
feat_names = eli5.transform_feature_names(anova_filter, list(df.columns)) 

Es ist in ähnlicher Weise wie Vivek funktioniert Kumars Vorschlag; Der Vorteil ist eine vereinheitlichte API - es ist nicht notwendig, sich solche Snippets für jeden Transformator zu merken.

Wenn Sie SVC (kernel = 'linear') mit sklearn.linear_model.LinearSVM ersetzen (was viel schneller auch sein sollte), können Sie dies tun:

eli5.show_weights(anova_svm, feature_names=list(df.columns)) 

und eine Tabelle wie folgt erhalten:

enter image description here

+0

Das funktioniert danke, genau wie bei der Antwort wo hast du es gefunden? – dasvootz

+0

Ich bin einer der Autoren von eli5 library; SelectKBest Support wurde von Joel Nothman (einer der Entwickler von scikit-learn) in diese Bibliothek eingebracht. Ich weiß also, dass die eli5-Bibliothek vorhanden ist, und ich musste mir die Implementierung ansehen, bevor ich die Pull-Anforderung zusammenführen konnte. In beiden Fällen ist die 'SelectKBest.get_support'-Methode in scikit-learn-Dokumenten dokumentiert - siehe http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest.get_support. –

+0

Coole Bibliothek, ich werde es meinen anderen Python-Freunden erzählen. Danke noch einmal. – dasvootz

Verwandte Themen