2009-07-17 4 views
3

Ich versuche, einen binären Klassifikationsentscheidungsbaum aus riesigen (d. H. Die nicht im Speicher gespeichert werden) Datasets mit MATLAB zu erstellen. Im Grunde, was ich tue ist:Lernen von Entscheidungsbäumen auf riesigen Datensätzen

  1. alle sammeln die Daten
  2. ausprobieren n Entscheidungsfunktionen auf den Daten
  3. die best decision function herausgreifen, um die Klassen innerhalb der Daten
  4. Split zu trennen die ursprüngliche Datenmenge in den 2
  5. Recurse auf den Splits

die Daten hat k Attribute und eine Klassifizierung, ist es, um eine Matrix mit einer großen Anzahl von Zeilen gespeichert ist, und k + 1 Spalten. Die Entscheidungsfunktionen sind boolesch und wirken auf die Attribute, die jede Zeile dem linken oder rechten Teilbaum zuweisen.

Momentan überlege ich, die Daten auf Dateien in Blöcken zu speichern, die im Speicher gehalten werden können und jeder Reihe eine ID zuweisen, so dass die Entscheidung getroffen wird, alle Dateien nacheinander zu lesen und die zukünftigen Aufteilungen zu identifizieren die ID-Nummern.

Weiß jemand, wie man das besser macht?

EDIT: Die Anzahl der Zeilen m ist um 5E8 und k etwa 500 ist

+0

Nur um zu verdeutlichen: k ist nicht riesig, nur die Anzahl der Zeilen ist? – Reunanen

+0

Ja, die Anzahl der Zeilen, m >> k – Jacob

Antwort

2

An jedem geteilt, Sie brechen den Datensatz in immer kleinere Teilmengen. Beginnen Sie mit der einzelnen Datendatei. Öffnen Sie es als Stream und verarbeiten Sie jeweils nur eine Zeile, um herauszufinden, welches Attribut Sie teilen möchten. Sobald Sie Ihre erste Entscheidungsfunktion haben, teilen Sie die ursprüngliche Datendatei in zwei kleinere Datendateien auf, die jeweils einen Zweig der aufgeteilten Daten enthalten. Rekursiv. Die Datendateien sollten immer kleiner werden, bis Sie sie in den Speicher laden können. Auf diese Weise müssen Sie keine Zeilen markieren und in einer riesigen Datendatei herumspringen.

+0

+1 - danke, das klingt ziemlich gut! – Jacob