我有一个包含超过250,000个观测值的大型数据集,我想使用 TraMineR
包进行分析 . 特别是,我想使用命令 seqtree
和 seqdist
,当我使用10,000个观察的子样本时,它可以正常工作 . 我的计算机可以管理的限制是大约20,000个观察 .
我想使用所有观察结果,我确实可以访问一台能够做到这一点的超级计算机 . 但是,这并没有太大帮助,因为该过程仅在单个核心上运行 . 因此,我的问题是,是否可以将并行计算技术应用于上述命令?或者还有其他方法可以加快这个过程吗?任何帮助,将不胜感激!
1 回答
内部
seqdist
函数是用C语言编写的,并且有许多优化 . 因此,如果要并行化seqdist,则需要在C中执行此操作 . 循环位于源文件"distancefunctions.cpp"中,您需要查看功能"cstringdistance"中位于第300行周围的两个循环(抱歉,所有注释都是法语) . 不幸的是,第二个重要的优化是所有计算之间共享内存 . 出于这个原因,我认为并行化将非常复杂 .除了选择示例之外,您还应该考虑以下优化:
相同序列的聚合(见这里:Problem with big data (?) during computation of sequence distances using TraMineR)
如果相关,您可以尝试减少时间粒度 . 距离计算时间高度依赖于序列长度(O ^ 2) . 见https://stats.stackexchange.com/questions/43601/modifying-the-time-granularity-of-a-state-sequence
减少时间粒度也可能增加相同序列的数量,从而增加优化的影响 .
seqdist
中有一个隐藏选项,可以使用最佳匹配算法的优化版本 . 它仍然处于测试阶段(这就是为什么它被隐藏),但它应该取代未来版本中的实际算法 . 要使用它,请设置method="OMopt"
,而不是method="OM"
. 根据您的顺序,它可能会缩短计算时间 .