5

TraMineR250,000 件を超える観測データを含む大規模なデータセットがあり、このパッケージを分析に使用したいと考えています。特に、たとえば 10,000 個の観測値のサブサンプルを使用する場合にうまく機能するコマンドseqtreeおよびを使用したいと思います。seqdist私のコンピュータが管理できる限界は、約 20,000 回の観測です。

私はすべての観察結果を利用したいと思っています。私は、まさにそれを行うことができるはずのスーパーコンピューターにアクセスできます。ただし、プロセスは単一のコアでのみ実行されるため、これはあまり役に立ちません。したがって、私の質問は、上記のコマンドに並列計算技術を適用することは可能ですか? または、プロセスをスピードアップする他の方法はありますか? どんな助けでも大歓迎です!

4

1 に答える 1

5

内部seqdist関数は C++ で記述されており、多数の最適化が行われています。このため、seqdist を並列化したい場合は C++ で行う必要があります。ループはソース ファイル「distancefunctions.cpp」にあり、関数「cstringdistance」の 300 行付近にある 2 つのループを確認する必要があります (申し訳ありませんが、すべてのコメントはフランス語です)。残念ながら、2 番目に重要な最適化は、メモリがすべての計算間で共有されることです。このため、並列化は非常に複雑になると思います。

サンプルの選択とは別に、次の最適化を検討する必要があります。

  • 同一配列の集約 (ここを参照: TraMineR を使用した配列距離の計算中のビッグデータの問題 (?) )
  • 関連する場合は、時間の粒度を減らすことを試みることができます。距離の計算時間は、シーケンスの長さ (O^2) に大きく依存します。https://stats.stackexchange.com/questions/43601/modifying-the-time-granularity-of-a-state-sequenceを参照してください
  • 時間の粒度を減らすと、同一のシーケンスの数も増える可能性があるため、最適化 1 の影響が大きくなります。
  • seqdistには、最適なマッチング アルゴリズムの最適化されたバージョンを使用する隠しオプションがあります。まだテスト段階ですが (そのため非表示になっています)、将来のバージョンで実際のアルゴリズムを置き換える必要があります。使用するにはmethod="OMopt"、 の代わりに を設定しmethod="OM"ます。シーケンスによっては、計算時間が短縮される場合があります。
于 2013-07-04T08:31:42.847 に答える