Scikit-learn - Funktion-Reduzierung durch RFECV und GridSearch. Wo sind die Koeffizienten gespeichert?
Ich bin mit Scikit-learn RFECV zu wählen wichtigsten Funktionen für eine Logistische regression mit Hilfe einer Kreuzvalidierung. Angenommen X ist ein [n,x] dataframe Funktionen, und y steht für die abhängige variable:
from sklearn.pipeline import make_pipeline
from sklearn.grid_search import GridSearchCV
from sklearn.cross_validation import StratifiedKFold
from sklearn import preprocessing
from sklearn.feature_selection import RFECV
import sklearn
import sklearn.linear_model as lm
import sklearn.grid_search as gs
# Create a logistic regression estimator
logreg = lm.LogisticRegression()
# Use RFECV to pick best features, using Stratified Kfold
rfecv = RFECV(estimator=logreg, cv=StratifiedKFold(y, 3), scoring='roc_auc')
# Fit the features to the response variable
rfecv.fit(X, y)
# Put the best features into new df X_new
X_new = rfecv.transform(X)
#
pipe = make_pipeline(preprocessing.StandardScaler(), lm.LogisticRegression())
# Define a range of hyper parameters for grid search
C_range = 10.**np.arange(-5, 1)
penalty_options = ['l1', 'l2']
skf = StratifiedKFold(y, 3)
param_grid = dict(logisticregression__C=C_range, logisticregression__penalty=penalty_options)
grid = GridSearchCV(pipe, param_grid, cv=skf, scoring='roc_auc')
grid.fit(X_new, y)
Zwei Fragen:
a) Ist dies den richtigen Prozess für die Funktion, hyper-parameter-Auswahl und-Einbau?
b) Wo finde ich die angepasste Koeffizienten für die ausgewählten Funktionen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist dies die richtige Verfahren für die feature Auswahl?
Dies ist EINE der vielen Möglichkeiten von feature-Auswahl. Recursive feature elimination ist ein automatisierter Ansatz, um diese, andere sind aufgelistet in scikit.lernen Dokumentation. Sie haben unterschiedliche vor-und Nachteile, und in der Regel feature-Auswahl wird am besten erreicht, indem man auch mit gesundem Menschenverstand und versucht, Modelle mit verschiedenen Funktionen an. RFE ist eine schnelle Methode, um die Auswahl eines guten Satz von Funktionen, aber nicht unbedingt geben Ihnen letztlich am besten. Durch die Art und Weise, die Sie nicht brauchen, um zu bauen Ihre StratifiedKFold getrennt. Wenn Sie nur die
cv
parametercv=3
beideRFECV
undGridSearchCV
automatisch StratifiedKFold, wenn die y-Werte sind Binär-oder multiclass, die ich gehe davon ist wahrscheinlich der Fall, da Sie mitLogisticRegression
.Sie können auch kombinieren
in
Ist dies den richtigen Prozess für die hyper-parameter-Auswahl?
GridSearchCV ist im Grunde eine automatisierte Möglichkeit, systematisch zu versuchen, eine ganze Reihe von Kombinationen von Modell-Parametern und Auswahl der besten unter diesen nach einigen performance-Metrik. Es ist ein guter Weg zu finden, gut geeignet Parametern, ja.
Ist dies der richtige Prozess für den Einbau?
Ja, dies ist eine gültige Art und Weise der Montage des Modells. Wenn Sie anrufen
grid.fit(X_new, y)
macht es ein raster vonLogisticRegression
Schätzer (jeweils mit einem Satz von Parametern, die versucht werden) und passt auf jedes von Ihnen. Es wird halten, der mit der besten performance untergrid.best_estimator_
, die Parameter dieser Schätzer ingrid.best_params_
und die Leistung Punktzahl für dieses Schätzers untergrid.best_score_
. Wird es wieder sich selbst, und nicht der beste Schätzer. Denken Sie daran, dass mit den neuen X-Werte, dass Sie das Modell verwenden, um vorherzusagen, haben Sie auf anwenden, um die Transformation mit den montierten RFECV Modell. So können Sie tatsächlich fügen Sie in diesem Schritt der pipeline.Wo finde ich die angepasste Koeffizienten für die ausgewählten Funktionen?
Die
grid.best_estimator_
Attribut ist einLogisticRegression
Objekt mit all diesen Informationen, sogrid.best_estimator_.coef_
hat alle Koeffizienten (undgrid.best_estimator_.intercept_
ist der Achsenabschnitt). Beachten Sie, dass in der Lage sein, diese zu bekommengrid.best_estimator_
, dierefit
parameter aufGridSearchCV
mussTrue
, aber dies ist der Standard sowieso.Im Grunde, Sie tun müssen eine Zug-validation-test-split für die Muster-Daten. Wo Zug-set wird verwendet, um den getunten normalen params, validation set für tuning hyperparameters in der grid-search, - und test-set für die Leistungsbewertung. Hier ist ein Weg, dies zu tun.
.loc
zuiloc
.kfold_df.iloc[test_index, :] = y_pred_probs
zu füllen, die fold_df in der for-Schleife: wenn die gleichen "test_index" erschien mehrere Male, werden die alten Ergebnisse überschrieben werden durch die neuen Ergebnisse? Dank