2016-07-01 12 views
2

ich diesen Code haben:biglm vorhersagen, nicht in der Lage ein Vektor der Größe zuzuteilen xx.x MB

library(biglm) 
library(ff) 

myData <- read.csv.ffdf(file = "myFile.csv") 
testData <- read.csv(file = "test.csv") 
form <- dependent ~ . 
model <- biglm(form, data=myData) 
predictedData <- predict(model, newdata=testData) 

das Modell ohne Probleme erstellt wird, aber wenn ich die Vorhersage machen ... es läuft aus dem Speicher:

nicht in der Lage einen Vektor der Größe xx, x MB

einige Hinweise zu vergeben? oder wie man ff verwendet, um Speicher für vorhergesagte Daten Variable zu reservieren?

+0

Modell $ Rang gibt mir einen Nullwert, und ich habe 6999251 Zeilen – antonio

Antwort

0

Hier sind die möglichen Ursachen und Lösungen:

  1. Ursache: Sie verwenden 32-Bit-R

    Lösung: Verwenden Sie 64-Bit-R

  2. Ursache: Sie sind gerade aus dem RAM

    Lösung: Mehr RAM zuweisen, wenn yo Sie können (?memory.limit). Wenn Sie nicht in der Lage sind, ff zu verwenden, arbeiten Sie in Chunks, die gc() ausgeführt werden, oder im schlimmsten Fall, indem Sie eine Cloud verwenden. Chunking ist oft der Schlüssel zum Erfolg mit Big Data - versuchen Sie, die Projektionen zu je 10% durchzuführen, speichern Sie die Ergebnisse nach jedem Chunk auf der Festplatte und entfernen Sie die In-Memory-Objekte nach der Verwendung.

  3. Ursache: Es ist ein Fehler im Code undichten Speicher

    Lösung: Befestigen Sie den Fehler - das sieht nicht, wie es Ihr Fall ist, aber stellen Sie sicher, dass Sie die Daten der erwarteten Größe haben und Behalte dein Ressourcenmonitor-Programm im Auge, um sicherzustellen, dass nichts Lustiges passiert.

+0

Ich habe Version 3.3.0 (2016-05-03) - "angeblich Educational" Plattform: x86_64-pc-Linux-gnu (64- Bit). Wissen Sie, wie Sie Daten mit ff für den vorhergesagten Vektor reservieren? – antonio

+0

@antonio Was meldet Ihr System in Bezug auf den Gesamt-RAM, freien RAM, bevor Sie dies versuchen, freien Speicherplatz auf der Festplatte und wie groß ist der Vektor, den er versucht und nicht teilt? Lass mich das zuerst fragen, denn wenn es xx.x MB und nicht xxxx.xx MB ist und du bist auf 64-Bit, dann musst du vielleicht die Speicherzuweisung auf R erhöhen, etc. –

3

Ich habe biglm Paket zuvor nicht verwendet. Basierend auf dem, was Sie gesagt haben, hatten Sie keinen Speicher mehr, wenn Sie predict aufrufen, und Sie haben fast 7.000.000 Zeilen für einen neuen Datensatz.

Um das Speicherproblem zu lösen, muss die Vorhersage chunkweise erfolgen. Beispielsweise können Sie 20.000 Zeilen gleichzeitig iterativ vorhersagen. Ich bin mir nicht sicher, ob die predict.bigglm chunk-weise Vorhersage kann.

Warum nicht einen Blick auf mgcv Pacakage werfen? bam kann lineare Modelle/verallgemeinerte lineare Modelle/verallgemeinerte additive Modelle usw. für große Datenmengen anpassen. Ähnlich wie biglm führt es beim Anpassen des Modells eine chunkweise Matrixfaktorisierung durch. Aber die predict.bam unterstützt chunk-weise Vorhersage, die wirklich nützlich für Ihren Fall ist. Darüber hinaus bietet es parallele Modellanpassung und Modellvorhersage, unterstützt durch parallel Paket [verwenden Sie das Argument cluster von bam(); siehe Beispiele unter ?bam und ?predict.bam für parallele Beispiele].

Tun Sie einfach library(mgcv), und überprüfen Sie ?bam, ?predict.bam.


Bemerkung

Sie nthreads Argument nicht für Parallelität verwenden. Das ist für die parametrische Regression nicht nützlich.

+0

Ich werde versuchen, bam ... I Ich sage dir meine Ergebnisse, danke – antonio

0

Ich habe versucht mit biglm und mgcv aber Speicher und Faktor Probleme kamen schnell. Ich hatte Erfolg mit: h2o library.