2017-12-14 5 views
0

Ich möchte einen Code schreiben, dass Gitter über ein paar Prozessoren und Präprozessoren, sondern auch über verschiedene Kombinationen von Features sucht. Ich tat dies, indem ich RFECV innerhalb eines gridsearchCV verwendete. Das dauert jedoch ewig. Deshalb habe ich die Bestellung storniert. Ich habe eine Gittersuche gemacht und dann habe ich sie in RFECV eingefügt. Jetzt möchte ich sehen und drucken, welche Features tatsächlich im besten Modell ausgewählt sind. Ich habe ein paar Lösungen von dieser Website ausprobiert, aber keine von ihnen hat funktioniert. Wie kann ich auf die ausgewählten Funktionen zugreifen? Sowohl grid_dem.get_support(indices=True) als auch grid_dem.support_ funktionierten nicht. Ich erhalte diese und andere ähnliche Fehler: AttributeError: 'RFECV' object has no attribute 'support_'Abrufen ausgewählter Features von RFECV innerhalb von gridsearchCV

Der relevante Teil meines Codes ist:

pipe = Pipeline([('preprocessing', StandardScaler()), ('rbf_svm', SVC(max_iter=1e6))]) 
param_grid ={'preprocessing': [StandardScaler(), MinMaxScaler(), Normalizer(), RobustScaler()], 
    'rbf_svm__kernel': ['rbf', 'poly', 'linear', 'sigmoid'], 
    'rbf_svm__C': np.logspace(-3,2,5), 'rbf_svm__gamma': np.logspace(-3,2,5)} 

    # {'preprocessing': [StandardScaler(), MinMaxScaler(), Normalizer(), RobustScaler()], 
    # 'rbf_svm': [LogisticRegression(max_iter=1e6)], 
    # 'logisticregression__C': np.logspace(-3,2,5)}] 

grid_dem = GridSearchCV(pipe, param_grid, cv=5,verbose=5,n_jobs=3) 
grid_dem.fit(X_democrat_train,y_democrat_train) 
grid_dem.score(X_democrat_test,y_democrat_test) 
print(grid_dem.best_estimator_) 
rfecv=RFECV(grid_dem, verbose=3) 
print(rfecv) 
print(rfecv.get_support(indices=True)) 
# rfecv=rfecv.fit_transform(X_democrat_train, y_democrat_train) 
# print(rfecv.get_params()) 

Wie Sie in den letzten beiden Zeilen sehen können, habe ich versucht, auch die X zu verwandeln, aber das hat nicht arbeite entweder.

Antwort

0

Sie haben eine Pipeline an gridSearch gesendet. So wird die best_estimator_ eine Pipeline zurückgeben. Aber grid_dem ist immer noch ein GridSearchCV-Objekt. So offensichtlich get_support() wird nicht funktionieren. Danach haben Sie diese grid_dem an RFECV übergeben aber nicht fit() darauf aufgerufen. Deshalb ist die support_ nicht verfügbar.

Bitte aktualisieren Sie Ihren Code wie folgt:

rfecv=RFECV(grid_dem.best_estimator_, verbose=3) <==Edited 
rfecv.fit(X_democrat_train,y_democrat_train) #<==This is what you want 
print(rfecv.get_support(indices=True)) 
# rfecv=rfecv.fit_transform(X_democrat_train, y_democrat_train) 
# print(rfecv.get_params())mocrat_train,y_democrat_train) 
+0

Vielen Dank für Ihre Antwort. Ich habe versucht, Ihr Update, aber ich bekomme den folgenden Fehler: 'RuntimeError: Der Klassifikator nicht "coef_" oder "feature_importances_" Attribute ". Was soll ich damit machen? – Kate

+0

@Kate Ja. Thats, weil GridSearchCV diese nicht hat und RFECV kann nur mit jenen Schätzern verwendet werden, die eines dieser Attribute haben. Probieren Sie die bearbeitete Antwort aus. –

Verwandte Themen