我在我的Java实现中遵循了这个关于cart算法的指南,并想知道是否有更快的方法来选择最优分割。
指南建议以下步骤:
对于每个特征: 对于该特征的每个值: 进行分割 如果分割的GINI得分小于之前的最小GINI,则记住该GINI得分
是否可以对这个过程进行修改,以牺牲局部精度来提高速度,但不会导致整体精度下降?虽然这可以很容易地并行化,但遍历每个属性及其值以选择单一分割仍然是成本高昂的。
回答:
是的,可以加速这个过程:
对于每个特征 按特征排序数据 计算目标不同值的累积计数 计算目标不同值的反向累积计数 在每个特征值处 根据累积计数计算gini值 保留最大值
如果特征取值有限,可以进一步优化。如果不排序数据,你可以聚合数据并使用聚合后的数据进行分割计算。
如果特征是分类变量,你可以遵循相同的过程,但按二元目标的目标密度对特征进行排序。如果你有超过两个目标值,这会变得稍微复杂一些。