TraMineR的并行计算

5

我有一个超过250,000个观察结果的大型数据集,希望使用TraMineR软件包进行分析。特别是,我想使用seqtreeseqdist命令,当我使用例如10,000个观测样本时,这些命令可以正常运行。但是,我的电脑只能处理20,000个观测结果。

我希望使用所有的观察结果,而且我可以访问超级计算机,它应该可以胜任这项工作。然而,由于该进程只在单个核心上运行,所以这并没有太大帮助。因此,我的问题是,是否可以将并行计算技术应用到上述命令中?或者是否有其他方法可以加快处理速度?感谢您的任何帮助!


3
以下三个答案是否有帮助?https://dev59.com/NnPYa4cB1Zd3GeqPg0Vp和https://dev59.com/0XDYa4cB1Zd3GeqPEMUL和http://stats.stackexchange.com/questions/43540/how-to-randomly-select-5-of-the-sample - Matthias Studer
亲爱的马蒂亚斯,感谢您的回答。我已经在使用您链接中描述的示例过程。我真正寻找的是一种使用多个核心加速距离计算的方法,以便将其应用于超级计算机上的整个数据集。我查看了一些允许您执行此操作的软件包,但它们不适用于TraMineR。但我想运行多个子样本也可以。再次感谢。 - Flow
1
我建议的解决方案是:相同序列聚合,使用 seqdist(method="OMopt"),改变时间粒度(见这里:http://stats.stackexchange.com/questions/43601/modifying-the-time-granularity-of-a-state-sequence),以获得更多相同的序列。 你面临哪些限制?CPU时间还是内存限制? - Matthias Studer
再次感谢。我会研究OMopt方法。我已经将时间粒度从月度更改为年度数据。内存限制不应该是问题,但我有一个7天的CPU时间限制。由于10,000个观测值已经需要相当长的时间,而且当添加更多观测值时计算时间似乎呈指数增长,我不确定这是否足够。但我会尝试一下。 - Flow
seqdist 只计算唯一序列之间的距离。有两个因素严重影响计算时间:序列长度和唯一序列数量。通过减少时间粒度,您会影响这两个因素(请参见下面我对答案的编辑)。使用三个月为一段时间可能已经产生了影响。 - Matthias Studer
1个回答

5
内部的seqdist函数是用C++编写的,具有许多优化。因此,如果您想并行化seqdist,则需要在C++中执行此操作。循环位于源文件“distancefunctions.cpp”中,并且您需要查看函数“cstringdistance”中大约位于第300行附近的两个循环(抱歉,所有注释都是法语)。不幸的是,第二个重要的优化是所有计算之间共享内存。因此,我认为并行化将非常复杂。
除了选择样本外,您应考虑以下优化:

非常感谢,这对我帮助很大!那我就只依靠子采样技术了。 - Flow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接