Ich arbeite an dem Problem mit zu vielen Funktionen und das Training meiner Modelle dauert viel zu lange. Ich habe einen Vorwärtsauswahlalgorithmus implementiert, um Features auszuwählen.
Allerdings habe ich mich gefragt, ob Scikit-Learn einen Vorwärtsauswahl- / schrittweisen Regressionsalgorithmus hat.
feature-selection
scikit-learn
Maksud
quelle
quelle
Antworten:
Nein, sklearn scheint keinen Algorithmus für die Vorauswahl zu haben. Es wird jedoch eine rekursive Merkmaleliminierung bereitgestellt, bei der es sich um einen gierigen Merkmaleliminierungsalgorithmus handelt, der der sequentiellen Rückwärtsauswahl ähnelt. Siehe die Dokumentation hier:
http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
quelle
coef_
Schnittstelle hat. Dies würde eine baumbasierte Methode usw. ausschließen. Ich denke jedoch, dass @Maksud nach einer Beschreibung in "Eine Einführung in das statistische Lernen" von James gefragt hat, in der Features aufgrund ihrer Wichtigkeit rekursiv hinzugefügt / entfernt werden, was durch die Genauigkeit der Validierungsmenge quantifiziert wird . Dies ermöglicht die Auswahl von Funktionen für alle Modelltypen, nicht nur für lineare Parameter.Sklearn DOES hat einen Vorwärtsauswahlalgorithmus, obwohl er in Scikit-Learn nicht so genannt wird. Die Feature-Auswahlmethode mit dem Namen F_regression in scikit-learn enthält nacheinander Features, die das Modell am meisten verbessern, bis
K
das Modell Features enthält (K ist eine Eingabe).Zunächst werden die Beschriftungen für jedes Feature einzeln zurückgeführt und anschließend anhand der F-Statistik überprüft, welches Feature das Modell am meisten verbessert hat. Anschließend wird die Gewinnfunktion in das Modell integriert. Anschließend werden die verbleibenden Features durchlaufen, um das nächste Feature zu finden, das das Modell am besten verbessert, und zwar wiederum mithilfe der F-Statistik oder des F-Tests. Dies geschieht so lange, bis das Modell K Merkmale enthält.
Beachten Sie, dass die verbleibenden Features, die mit im Modell enthaltenen Features korrelieren, wahrscheinlich nicht ausgewählt werden, da sie nicht mit den Residuen korrelieren (obwohl sie möglicherweise gut mit den Beschriftungen korrelieren). Dies schützt vor Multi-Kollinearität.
quelle
Scikit-Learn unterstützt in der Tat keine schrittweise Regression. Das liegt daran, dass das, was gemeinhin als "schrittweise Regression" bezeichnet wird, ein Algorithmus ist, der auf p-Werten von linearen Regressionskoeffizienten basiert, und das Lernen mit Hilfe von Scikits den inferentiellen Ansatz für das Lernen von Modellen (Signifikanztests usw.) bewusst vermeidet. Darüber hinaus ist reines OLS nur einer von zahlreichen Regressionsalgorithmen und aus der Sicht des Scikit-Learn weder sehr wichtig noch einer der besten.
Es gibt jedoch einige Ratschläge für diejenigen, die noch eine gute Möglichkeit für die Feature-Auswahl mit linearen Modellen benötigen:
ElasticNet
oderLasso
.StandardScaler
und ordnen Sie Ihre Funktionen dann einfach nachmodel.coef_
. Für vollkommen unabhängige Kovariaten entspricht dies der Sortierung nach p-Werten. Die Klassesklearn.feature_selection.RFE
erledigt dies für Sie undRFECV
bewertet sogar die optimale Anzahl von Funktionen.statsmodels
mlxtend
Paket unterstützt diesen Ansatz für jeden Schätzer und jede Metrik.statsmodels
, da dieses Paket p-Werte für Sie berechnet. Eine grundlegende Vorwärts-Rückwärts-Auswahl könnte folgendermaßen aussehen:`` `
In diesem Beispiel wird die folgende Ausgabe gedruckt:
quelle
Tatsächlich gibt es einen netten Algorithmus namens "Forward_Select", der Statsmodels verwendet und es Ihnen ermöglicht, Ihre eigene Metrik (AIC, BIC, Adjusted-R-Squared oder was auch immer Sie möchten) festzulegen, um dem Modell schrittweise eine Variable hinzuzufügen. Der Algorithmus befindet sich im Kommentarbereich dieser Seite - scrollen Sie nach unten und Sie sehen ihn am unteren Rand der Seite.
https://planspace.org/20150423-forward_selection_with_statsmodels/
Ich würde hinzufügen, dass der Algorithmus auch eine nette Funktion hat: Sie können ihn entweder auf Klassifizierungs- oder auf Regressionsprobleme anwenden! Du musst es nur sagen.
Probieren Sie es aus und überzeugen Sie sich.
quelle
Eigentlich hat sklearn keinen Forward-Auswahlalgorithmus, dachte eine Pull-Anfrage mit einer Implementierung der Forward-Feature-Auswahl wartet seit April 2017 im Scikit-Learn-Repository.
Alternativ können Sie in mlxtend vorwärts und rückwärts vorwärts wählen . Sie finden das Dokument in Sequential Feature Selector
quelle