这里的概念问题。
我正在递归地构建决策树。函数的每次迭代都采用训练样本的一个子集,遍历所有特征和每个特征内所有可能的拆分,找到可能的最佳拆分,将子集拆分为两个较小的子集,然后调用自身(函数)两次,每次调用一次分裂子集。
我之前在 MatLab 中对此进行了编码,但它运行得太慢了,所以现在我在 C 中尝试它(我不太熟悉)。在 MatLab 中,我使用了一个全局“拆分”矩阵来保存每个拆分的信息(哪个特征,该特征中的什么值,如果这是一个叶节点,分类是什么,每个子节点的行号),并且这样我就可以使用新的测试数据点遍历该矩阵以找到其分类。
看起来 C 中的全局二维数组可以使用头文件,但如果有另一种方法,我宁愿不进入头文件。问题是,因为函数是递归调用的,所以我很难知道“拆分”中的下一个可用行是什么。我可以做一些事情,比如孩子的行是父行的 2*i 和 2*i+1,但是对于有很多拆分的大型数组,这将需要大量的初始存储。
有任何想法吗?