2016-06-27 16 views
0

Ich versuche häufige (geordnete oder ungeordnete) Muster in einer Spalte zu finden. Die Spalte enthält numerische IDs. für zB: s = [1 2 3 4 1 2 6 7 8 2 1 10 11]Versuchen, häufige Muster in einer Sequenz zu finden Python

Hier ist 1 2 oder 2 1 als der gleiche Fall der häufigste Satz.

Bitte helfen Sie mir, dieses Problem zu lösen, ich könnte an apriori, FP-Algorithmen denken, aber ich habe keine Transaktion, nur eine Sequenz.

+0

Was die Mustergrößen festgelegt werden? – Ryan

+0

beliebiger Größe (2: N). Ich habe Millionen von Datenzeilen. – nezz

Antwort

0

Es gibt eine Reihe von Geschäftsentscheidungen, die Sie treffen müssen, bevor Sie einen normalen Algorithmus haben. Die erste und wichtigste Entscheidung ist die Größe des Sets. Wenn Sie {a, b, ... x} haben ist die häufigste Menge, dann wird jede Teilmenge (wie {a, x} oder {c, d, y} wird mindestens mit der gleichen Häufigkeit sein).

Sie müssen wissen, welche Sie benötigen (möglicherweise alle oder alle). Was würden Sie auch tun, wenn diese Frequenzen {a, b} mit der Frequenz 100 und {a, c, d, e, f, g} mit der Frequenz 20 auftreten. Natürlich ist die erste häufiger, aber die zweite ist auch ziemlich häufig und sehr lang.

Eine Möglichkeit, dies zu erreichen, besteht darin, über alle 1 Elementuntersequenzen zu iterieren und deren Häufigkeit zu ermitteln. Dann alle 2 Elemente und so weiter. Dann erstellen Sie eine gewichtete Bewertung, die die Häufigkeit multipliziert mit einer Funktion basierend auf der Länge der Sequenz sein kann. Wählen Sie die höchste Punktzahl.

+0

Ich versuche herauszufinden, alle häufigen Sets, die zusammenkommen (egal welcher Länge), das sind eigentlich alarmIDs, in denen es eine Korrelation zwischen den alarmIDs gibt, also nachdem ich die häufigen Sets gefunden habe, möchte ich weitere Informationen mit diesen voraussagen häufige Sätze. – nezz

+0

@NehaGoyal also nur der erste Teil ohne eine gewichtete Punktzahl zu erstellen. –

+0

Ich versuche, das gleiche zu tun, aber wird es nicht zu lange dauern? Gibt es keinen direkten Algorithmus? @SalvadorDali – nezz

0

Ich kann eine Brute-Force denkt approach.But es nicht nicht ist efficient.It so etwas wie sein:

a) Calculate the powerset of the given sequence (it will be completed in exponential time). This will include duplicate occurrences of subsets as well. 
b) Iterate over the subsets and calculate the frequency of each subset. 
c) Sort in ascending order of the frequencies calculated in step (b) and pick the K smallest.