中。
我很难找到解决方案。有人有建议吗?
I看了看randomForestSRC
h2o
,两者都不支持室随机森林。
comesty我正在寻找一种基于R的解决方案,但是如果有人知道使用大型数据 +竞争风险随机森林的方法,我很乐意探索其他任何东西。
一般而言,RF-SRC数据集的内存配置文件是64位计算机上的N X P X 8。 n = 500,000和p = 20,RAM使用率约为80MB。 这不是很大。 您还需要考虑森林的大小,$ nativearray。 对于默认的nodesize = 3,您将具有N / 3 = 166,667端子节点。 假设为了方便起见,对称树的总 /外部节点的总数将大约为2 * n / 3 = 333,333。 由于默认的ntree = 1000,并且假设没有任何因素,$ nativeArray将为尺寸[2 * n / 3 * ntree] x [5]。 一个简单的示例将向您展示为什么我们在$ nativearray中有[5]列来标记拆分参数和拆分值。 因此,森林的内存使用率将为2 * n / 3 * ntree * 5 * 8 = 1.67GB。
现在,我们正在陷入一些严重的内存使用情况。 next考虑合奏。 您还没有说过在竞争风险数据集中有多少事件,但让我们假设有两个事件为简单起见。
这里的大阵列是特定原因危害函数(CSH)和特定原因累积发生率函数(CIF)。 这些都是尺寸[n] x [time.interest] x [2]的尺寸。 在最坏的情况下,如果您的所有时间都不同,并且没有审查的事件,time.interest = n。 因此,这些输出中的每一个都是n * n * 2 * 8字节。 这将炸毁大多数机器。 是时候了,这是你的敌人。 在大n情况下,您需要将时间限制为实际事件时间的子集。这可以用参数NTime控制。
文档:
NTIME:用于生存家族的整数值将集成计算限制为不超过N时间时间点的时间值的网格。 另外,如果长度的值大于一个提供的值,则假定这些是用于约束计算的时间点(请注意,所使用的约束时间点将是最接近用户提供的事件时间的时间点)。 如果未指定值,则默认操作是使用所有观察到的事件时间。我的建议是从NTime的一个很小的值开始,只是为了测试是否可以在没有问题的情况下对数据集进行整体分析。 然后逐渐增加它并观察您的RAM使用情况。 请注意,如果您缺少数据,则RAM使用情况将更大。 另请注意,我没有提及其他阵列,例如终端节点统计信息,这些端口统计数据也会导致大量使用。 我只考虑了合奏,但现实是每个端子节点将包含尺寸的数组[time.Interest] x 2用于CSH和CIF的节点特定估计器,用于创建森林集合。 未来,我们将实施一个大数据选项,该选项将抑制合奏并优化软件包的内存配置文件,以更好地适应大N场景。 同时,您必须努力使用NTREE,nodesize和ntime等现有选项来减少RAM使用情况。
我确实意识到我要在最初的问题后几年,但是我们最近完成了一项有关可扩展竞争风险的树木的研究工作。
我们在大型数据集上使用它非常成功。