Question

Je suis en train de construire un arbre de décision de classification binaire sur des ensembles de données énorme (ce qui ne peut pas être stocké dans la mémoire) Matlab. Essentiellement, ce que je fais est:

  1. Collectez toutes les données
  2. Essayez n Fonctions de décision sur les données
  3. Choisissez le meilleure fonction de décision pour séparer les classes dans les données
  4. Diviser l'ensemble de données d'origine dans 2
  5. Recurse sur le grand écart

Les données a k attributs et une classification, il est donc stockée sous la forme d'une matrice avec un énorme nombre de lignes, et k + 1 colonnes. Les fonctions de décision sont booléen et agissent sur les attributs affectant chaque rangée de la sous-arbre gauche ou à droite.

En ce moment, j'envisage de stocker les données sur les fichiers en morceaux qui peuvent être tenues en mémoire et l'attribution d'un ID à chaque ligne de sorte que la décision de scinder est fait en lisant tous les fichiers de façon séquentielle et les futures divisions sont identifiés par la numéros d'identification.

Quelqu'un sait comment faire mieux la mode?

EDIT: le nombre de lignes m est d'environ 5E8 et k est de l'ordre 500

Était-ce utile?

La solution

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 comme un flux et traiter une seule ligne à la fois de comprendre que vous attribuez voulez partager sur. Une fois que vous avez votre première fonction de décision, diviser le fichier de données d'origine dans 2 petits fichiers de données qui détiennent chacun une branche des données fractionnées. Recurse. Les fichiers de données doivent devenir plus petits et plus petits jusqu'à ce que vous pouvez les charger en mémoire. De cette façon, vous ne devez pas marquer les lignes et garder sauter dans un énorme fichier de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top