Python 生命线包中 AalenAdditiveFitter 的内存问题

数据挖掘 机器学习 Python 生存分析
2022-03-10 22:47:57

我们正在研究与生存分析相关的问题。我们已经实现了 Cox 比例风险模型和加速故障时间算法。现在我们想看看协变量如何随时间变化。所以我们决定AalenAdditiveFitterlifelines库中实现。这是一个虚拟数据。数据形状为(1341799, 4)

           Gender        Disability_level       Time_to_event     Event
    
    1      Female             Mild                   50            0 
    2       Male            Moderate                 70            1
    3       Male             Severe
    .
    .
    .
 1341799   Female             Mild                   45            1

现在,我们面临的问题与内存有关。一个热编码后的数据形状变为(1341799, 15)据我们所知,AalenAdditiveFitter转置给定的数据矩阵并进行一些内部修改。1904列数从 only增加到15这是我们得到的错误。

MemoryError:无法为形状(1904、1341799)和数据类型 float64 的数组分配 19.0 GiB

当我们减少行数时,代码可以正常工作。但这不符合我们的目的。谁能解释引擎盖下发生了什么?有没有办法解决这个问题?是否有任何其他方法可用于捕获协变量在整个时间内的可变性?

1个回答

阅读 AalenAdditiveFitter的代码,使用大量内存有几个原因。

主要问题是它使用内存效率低的熊猫数据帧(尤其是与 NumPy 数组相比)。

另一个问题是 .fit() 方法会复制那些大而低效的 panda DataFrame:

X, T, E, weights = self._preprocess_dataframe(df)

self.durations = T.copy()
self.event_observed = E.copy()
self.weights = weights.copy()