2017-07-23 2 views
3

Ich arbeite mit Scikit lernen auf einem Textklassifikationsexperiment. Jetzt möchte ich die Namen der leistungsstärksten, ausgewählten Funktionen erhalten. Ich habe einige Antworten auf ähnliche Fragen versucht, aber nichts funktioniert. Die letzten Codezeilen sind ein Beispiel dafür, was ich versucht habe. Zum Beispiel, wenn ich feature_names drucke, erhalte ich diesen Fehler: sklearn.exceptions.NotFittedError: This SelectKBest instance is not fitted yet. Call 'fit' with appropriate arguments before using this method. Irgendwelche Lösungen?Feature-Namen von sklearn pipeline: nicht passender Fehler

scaler = StandardScaler(with_mean=False) 

enc = LabelEncoder() 
y = enc.fit_transform(labels) 

feat_sel = SelectKBest(mutual_info_classif, k=200) 
clf = linear_model.LogisticRegression() 

pipe = Pipeline([('vectorizer', DictVectorizer()), 
       ('scaler', StandardScaler(with_mean=False)), 
       ('mutual_info', feat_sel), 
       ('logistregress', clf)]) 

feature_names = pipe.named_steps['mutual_info'] 
X.columns[features.transform(np.arange(len(X.columns)))] 
+0

Sie müssen das Rohr passen. Siehe meine Antwort – sera

Antwort

1

Sie zuerst haben passen die Pipeline und dann feature_names nennen:

Lösung

scaler = StandardScaler(with_mean=False) 

enc = LabelEncoder() 
y = enc.fit_transform(labels) 

feat_sel = SelectKBest(mutual_info_classif, k=200) 
clf = linear_model.LogisticRegression() 

pipe = Pipeline([('vectorizer', DictVectorizer()), 
       ('scaler', StandardScaler(with_mean=False)), 
       ('mutual_info', feat_sel), 
       ('logistregress', clf)]) 

# Now fit the pipeline using your data 
pipe.fit(X, y) 

#now can the pipe.named_steps 
feature_names = pipe.named_steps['mutual_info'] 
X.columns[features.transform(np.arange(len(X.columns)))] 

Allgemeine Informationen

Aus der Dokumentation example here können Sie sehen, die

anova_svm.set_params(anova__k=10, svc__C=.1).fit(X, y) 

Dies stellt einige Anfangsparameter (k Parameter für anova und C Parameter für SVC)

und ruft dann fit(X,y) die Pipeline passen.

EDIT:

für den neuen Fehler, da Ihre X eine Liste der Wörterbücher I ist eine solche Art und Weise sehen Sie die Spalten Methode aufzurufen, die Sie wollen. Dies kann mit Pandas geschehen.

X= [{'age': 10, 'name': 'Tom'}, {'age': 5, 'name': 'Mark'}] 

df = DataFrame(X) 
len(df.columns) 

Ergebnis:

2 

hoffe, das hilft

+1

Meine Instanzen (X) ist eine Liste von Wörterbüchern. Wenn ich den Code ausführe, bekomme ich immer noch einen Fehler in der letzten Zeile: 'list object hat keine Attributspalten'. – Bambi

+0

@Bambi Ich habe meine Antwort bearbeitet, um eine mögliche Lösung für den neuen Fehler zu finden. – sera

+0

danke, das hilft! Ich habe nur eine Frage, gibt es eine Möglichkeit, die echten Feature-Namen zu bekommen? Wie "Alter" und "Name" in Ihrem Beispiel? – Bambi

Verwandte Themen