2013-07-04 13 views
5

Ho un set di dati di grandi dimensioni con più di 250.000 osservazioni e vorrei utilizzare il pacchetto TraMineR per la mia analisi. In particolare, vorrei usare i comandi seqtree e seqdist, che funziona bene quando per esempio uso un sottocampione di 10.000 osservazioni. Il limite che il mio computer può gestire è di circa 20.000 osservazioni.Calcolo parallelo per TraMineR

Vorrei utilizzare tutte le osservazioni e ho accesso a un supercomputer che dovrebbe essere in grado di fare proprio questo. Tuttavia, questo non aiuta molto come il processo gira su un solo core. Quindi, mia domanda, è possibile applicare tecniche di calcolo parallelo ai comandi sopra menzionati? O ci sono altri modi per accelerare il processo? Qualsiasi aiuto sarebbe apprezzato!

+3

Le seguenti tre risposte sono utili? http://stackoverflow.com/questions/17085780/how-to-use-discrepancy-analysis-with-traminer-and-aggregated-sequence-data e http://stackoverflow.com/questions/15929936/problem-with- big-data-durante-calcolo-della-sequenza-distanze-usando-tramine e http://stats.stackexchange.com/questions/43540/how-to-randomly-select-5-of-the-sample –

+0

Caro Matthias , grazie per la tua risposta. Sto già utilizzando la procedura di esempio descritta nei tuoi collegamenti. Quello che cerco davvero è un modo di utilizzare più core per accelerare il calcolo della distanza per applicarlo all'intero dataset del super-computer. Ho esaminato alcuni pacchetti che ti permettono di farlo, ma non funzionano con TraMineR. Ma credo che l'esecuzione di più sottocampioni va bene. Grazie ancora. – Flow

+1

Le soluzioni che stavo suggerendo sono: aggregazione di sequenze identiche, usando 'seqdist (method =" OMopt ")', cambiando la granularità del tempo (vedi qui: http://stats.stackexchange.com/questions/43601/modifying-the-time -granularity-of-a-state-sequence) per avere sequenze più identiche. Quale limite stai affrontando? Tempo di CPU o limite di memoria? –

risposta

5

La funzione interna seqdist è scritta in C++ e offre numerose ottimizzazioni. Per questo motivo, se vuoi parallelizzare seqdist, devi farlo in C++. Il loop si trova nel file sorgente "distancefunctions.cpp" e devi guardare i due loop situati intorno alla riga 300 nella funzione "cstringdistance" (scusate ma tutti i commenti sono in francese). Sfortunatamente, la seconda ottimizzazione importante è che la memoria è condivisa tra tutti i calcoli. Per questo motivo, penso che la parallelizzazione sarebbe molto complicata.

Oltre a selezionare un campione, si dovrebbe considerare le seguenti ottimizzazioni:

+0

Grazie mille, questo aiuta molto! Allora mi baserò su tecniche di sottocampionamento. – Flow