2017-01-20 3 views
1

Ich versuche, die Feature-Auswahl mit Boruta-Paket in R. Das Problem ist, dass mein Feature-Set ist zu groß (70518 Features) und daher das Datenframe ist zu groß (2 GB) und kann nicht sofort mit dem Boruta-Paket bearbeitet werden. Ich frage mich, ob ich den Datenrahmen in mehrere Sätze aufteilen kann, von denen jeder eine kleinere Menge an Funktionen enthält? Das klingt ein bisschen komisch für mich, da ich nicht sicher bin, ob der Algorithmus die Gewichte richtig identifizieren kann, wenn nicht alle Funktionen vorhanden sind. Wenn nicht, wäre ich sehr dankbar, wenn jemand einen alternativen Weg vorschlagen könnte.Feature Auswahl auf Teilmengen von Feature-Set

+0

Wie viele Datensätze haben Sie? – Ansjovis86

+0

Ich habe 1157 Instanzen und 70518 Funktionen. von denen ich 786 als Trainingssatz und 371 zum Testen verwende – Kate

+0

Sie könnten besser die Hälfte Ihrer Instanzen nehmen und es erneut versuchen. Ich denke du solltest alle Features zusammenhalten. Keith schlägt jedoch bereits das Caret-Paket vor. Es sollte möglich sein, Feature-Auswahl mit der Größe des Datenrahmens zu machen, die Sie haben. Sie könnten ansonsten in Erwägung ziehen, einen univariaten Filter durchzuführen, z. B. Varianzfilterung, um eine Feature-Vorauswahl durchzuführen, bevor Sie die eigentliche Feature-Auswahl vornehmen. Nur um die Dimensionalität zu reduzieren. – Ansjovis86

Antwort

0

Ich denke, Ihr bestes in diesem Fall könnte sein, zuerst einige der Merkmale zu versuchen und herauszufiltern, die entweder niedrige Information (z. B. Nullvarianz) oder stark korreliert sind.

Die caret package hat some useful functions to help with this.

Zum Beispiel kann die findCorrelation() leicht verwendet werden, um redundante Funktionen zu entfernen:

dat <- cor(dat, method='spearman') 
dat[is.na(dat)] <- 0 

features_to_ignore <- findCorrelation(dat, cutoff=0.75, verbose=FALSE) 
dat <- dat[,-features_to_ignore] 

Dadurch wird alle Funktionen mit einer Spearman Korrelation von 0,75 oder höher entfernen.

+0

danke, aber das funktioniert nicht mit einem großen Dataset. Wird sich alles aufteilen? – Kate

+0

Intuitiv ist das Teilen der Daten nicht vollständig effektiv. Wenn beispielsweise zwei stark korrelierte Features in verschiedenen Partitionen landen, werden sie nicht von der Analyse ausgeschlossen. Ist das Problem, dass das Dataset zu groß ist, um es im Speicher zu halten? Oder ist es speziell, dass das Boruta-Paket keinen Speicher mehr hat? –

+0

Es ist zu groß, um es im Speicher zu halten. Es tut uns leid, dass es nicht klar ist. – Kate

0

Ich werde mit der Frage beginnen, warum Sie glauben, dass dies sogar funktionieren kann? In diesem Fall ist nicht nur p >> n, sondern p >>>>>> n. Du wirst immer falsche Assoziationen finden. Mehr noch, selbst wenn Sie das tun könnten (sagen Sie, indem Sie eine ausreichend große Maschine in einem Cloud-Computing-Dienst anmieten, was die Methode ist, die ich vorschlagen würde), betrachten Sie eine absurde Menge an Berechnungen, da die Rechenkomplexität von Erstellen eines einzelnen Entscheidungsbaums ist O(n * v log(v)), wobei n ist die Anzahl der Datensätze und v ist die Anzahl für Felder in jedem Datensatz. Der Aufbau eines RF erfordert für jeden Baum so viel.

Anstatt das Problem wie erwähnt zu lösen, sollten Sie es von Grund auf neu überdenken. Was bist du wirklich versuchen, hier zu tun? Kannst du zu den ersten Prinzipien zurückkehren und das überdenken?

Verwandte Themen