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:
Also, Sie möchten die Funktionen aus dem SelectKBest erhalten, die auf dem SVM übergeben werden? –
Richtig, aber ich konnte keine anderen Methoden zum Laufen bringen. – dasvootz
Was ist mit 'df_train.columns [anova_svm.steps [0] [1] .get_support()]' –