2009-07-17 8 views
3

J'essaie de construire un arbre de décision de classification binaire à partir d'énormes ensembles de données (c'est-à-dire qui ne peuvent pas être stockés en mémoire) en utilisant MATLAB. Essentiellement, ce que je fais est:Arbres de décision d'apprentissage sur d'énormes ensembles de données

  1. recueillir toutes les données
  2. Essayez n fonctions de décision sur les données
  3. Choisissez le best decision function pour séparer les classes dans les données
  4. de Split l'ensemble de données d'origine en 2
  5. Recurse sur les fentes

les données ont k attributs et une classification, de sorte qu'il est stocké sous forme de matrice avec énorme nombre de lignes, et k + 1 colonnes. Les fonctions de décision sont booléennes et agissent sur les attributs assignant chaque ligne au sous-arbre gauche ou droit. Actuellement, j'envisage de stocker les données sur des fichiers en morceaux pouvant être conservés en mémoire et d'attribuer un identifiant à chaque ligne, de sorte que la décision de scinder soit prise en lisant tous les fichiers de manière séquentielle et que les futurs scissions soient identifiées par les numéros d'identification.

Est-ce que quelqu'un sait comment faire cela d'une meilleure façon?

EDIT: Le nombre de lignes m est d'environ 5E8 et k est d'environ 500

+0

Juste pour clarifier: k n'est pas énorme, seul le nombre de lignes est? – Reunanen

+0

Oui, le nombre de lignes, m >> k – Jacob

Répondre

2

A chaque fraction, vous violez l'ensemble de données en sous-ensembles plus petits et plus petits. Commencez avec le fichier de données unique. Ouvrez-le en tant que flux et traitez simplement une ligne à la fois pour déterminer l'attribut sur lequel vous souhaitez diviser. Une fois que vous avez votre première fonction de décision, divisez le fichier de données d'origine en deux fichiers de données plus petits contenant chacun une branche des données divisées. Recurse. Les fichiers de données doivent devenir de plus en plus petits jusqu'à ce que vous puissiez les charger en mémoire. De cette façon, vous n'avez pas besoin d'étiqueter des lignes et de continuer à sauter dans un énorme fichier de données.

+0

+1 - merci, cela semble plutôt bien! – Jacob

Questions connexes