3

我正在尝试使用 MATLAB 从巨大的(即不能存储在内存中的)数据集构建二元分类决策树。本质上,我正在做的是:

  1. 收集所有数据
  2. 在数据上尝试n 个决策函数
  3. 选择最佳决策函数来分离数据中的类
  4. 将原始数据集拆分为 2
  5. 在拆分上递归

数据有k个属性和一个分类,所以它被存储为一个包含大量行和k+1列的矩阵。决策函数是布尔值,作用于将每一行分配给左子树或右子树的属性。

现在我正在考虑将文件中的数据存储在可以保存在内存中的块中,并为每一行分配一个 ID,以便通过顺序读取所有文件来决定拆分,并且未来的拆分由 ID 号标识。

有谁知道如何以更好的方式做到这一点?

编辑:行数 m 约为 5e8 而 k 约为 500

4

1 回答 1

2

在每次拆分时,您都将数据集分解为越来越小的子集。从单个数据文件开始。将其作为流打开,一次只处理一行以确定要拆分的属性。有了第一个决策函数后,将原始数据文件拆分为 2 个较小的数据文件,每个文件包含拆分数据的一个分支。递归。数据文件应该越来越小,直到您可以将它们加载到内存中。这样,您不必标记行并在巨大的数据文件中不停地跳来跳去。

于 2009-07-17T19:17:55.223 回答