Sequenzvorhersage von Charakteren?

8

Ich bin neu im maschinellen Lernen, also gehen Sie bitte einfach, falls das Problem trivial ist.

Ich habe eine Folge von beobachteten Zeichen erhalten, sagen wir, ABABBABBB ..... (n Zeichen). Mein Ziel ist es, die nächsten Charaktere durch einige "lernende" Mechanismen vorherzusagen. Meine Einschränkungen sind, dass die observierten Zeichen (Trainingsdaten?) Nicht zu viel ist, d. H. Ich habe eine Sequenz der Länge 6000 gesagt, um das zugrunde liegende Muster zu lernen

Ich bin ziemlich verwirrt darüber, welche Strategie zur Lösung dieses Problems zu ergreifen ist, meine ersten Wetten sind: 1) irgendeine Art von Ngram-Modell? 2) Neuronale Netze (wie LSTM) etc.? 3) HMMs

Können Sie bitte die richtigen Ansätze zur Lösung dieses Problems angeben?

    
suzee 12.03.2017, 13:30
quelle

2 Antworten

3

Ihr Problem scheint eine Zeitreihenanalyse zu sein. Dazu sollten Sie neben maschinellen Lernalgorithmen auch Statistiken und Explorative Data Analysis (EDA) berücksichtigen.

  1. Ich würde damit anfangen, Zahlen den Zeichen zuzuweisen (A- & gt; 1, B- & gt; 2 und so weiter). Es wird normalerweise nicht empfohlen, nominale Variablen (Werte ohne Reihenfolge) in ordinale umzuwandeln, (2 ist größer als 1, aber "C" größer als "A" oder "Rot" größer als "Grün" ?!), aber in diesem Fall Dies wird Ihr Problem in eine absolute Zeitreihenanalyse verwandeln.

  2. Dann würde ich einige routinemäßige EDA-Ansätze verwenden, wie 4-plot oder Autokorrelation Analyse. Das würde Ihnen viel über das statistische Verhalten von Daten sagen, wie "ist der Mittelwert der Datenverschiebung?" oder "Wie viel Zufall könnte der Datensatz sein?" Danach würden Sie wahrscheinlich eine bessere Entscheidung darüber treffen, welcher maschinelle Lernalgorithmus

  3. verwendet
  4. Je nachdem, was Sie in der EDA-Analyse finden, können Sie ML-Algorithmen implementieren. Wenn Sie über stark korrelierte Daten verfügen (aus der Autokorrelationsdarstellung), würden Sie wahrscheinlich einen gleitenden Fensteransatz in Ihrer Merkmalauswahl wählen, d. H. Sie gehen davon aus, dass jeder Wert von vorherigen k-Werten abhängt ( x_k = f(x_(k-1),x_(k-2),...,x_(k-m)) ). Der Wert von "m" könnte durch Analysieren der Autokorrelationsdarstellung ausgewählt werden. Wenn Sie einen gleitenden Durchschnitt haben, wäre es eine gute Idee, zuerst die Durchschnittskurve zu lernen und dann den Offset jeder Instanz von ihrem Durchschnitt zu lernen. Wenn Sie einen Grad an Zufälligkeit entweder in der Durchschnittskurve oder in Instanzversätzen wahrgenommen haben, sollten Sie vielleicht einen stochastischen Ansatz durch Ihr Vorhersageproblem wählen.

Im Allgemeinen lautet die Philosophie von EDA: "Die Analyse sollte vor der Modellauswahl stehen", und ich denke, das stimmt. Wenn du mehr darüber weißt, womit du es zu tun hast, wirst du definitiv einen besseren Ruf für die Modellauswahl haben

    
Alireza 22.03.2017 09:46
quelle
2

Wenn Sie mit einem ziemlich trivialen Muster zu tun hat, wo Buchstaben basieren nur aus dem vorherigen, dann sind Sie genau richtig, dass ein Hidden-Markov-Modell (HMM) es lösen würde - in der Tat etwas so Einfacher wie ein Markov Chain funktionieren würde.

Wenn Sie ein wenig Spaß haben möchten, dann ist hier eine benutzerdefinierte Lösung basierend auf dem HMM, mit dem Sie herumspielen können.

Gehen Sie über die Beispieldaten und erstellen Sie eine verknüpfte Liste aller Elemente in der Reihenfolge, in der sie eingefügt wurden. Erstellen Sie nun für jedes andere Zeichen eine andere Liste und fügen Sie den Index jedes Listenelements hinzu, wo es hingehört. Hier ist eine (sehr schlecht gezeichnete) visuelle Darstellung der verknüpften Liste und der darunter liegenden Buckets:

Wenn Sie nun eine Sequenz präsentiert werden, und bat um das nächste Zeichen zu prognostizieren, alles, was Sie tun müssen, ist in den letzten X Charaktere zu sehen, und sehen, wie Untersequenzen, die ihm ähnlich waren gehandelt hat.

Um mein Beispiel oben zu verwenden, schauen Sie sich die letzten (die letzten) 3 Zeichen an, um BAC zu erhalten. Sie möchten sehen, ob die Sequenz BAC jemals zuvor passiert ist und was danach kam, als es passiert ist. Wenn Sie den Eimer für die ersten Buchstaben von BAC (das B ) überprüfen, können Sie sehen, dass der Brief B schon einmal auftauchte. Zum Glück folgt es der Sequenz - und ein A kam danach, so dass das die Vorhersage sein wird.

Sie möchten vielleicht nicht nur Sequenzen der Vergangenheit X überprüfen, sondern auch jede Zahl unter X, die jeweils ein geringeres Gewicht zu geben, wenn die Sequenz übereinstimmt, eine bessere Heuristik erstellen.

Der schwierigste Teil ist, zu entscheiden, wie weit man zurückschauen soll - wenn man zu weit schaut, wird es zu lange dauern, und man bekommt vielleicht keine Matches. Wenn Sie zu kurz schauen, verpassen Sie vielleicht ein Muster und müssen raten.

Viel Glück - hoffentlich ist das schön und einfach zu implementieren und funktioniert für Sie.

    
Addison 17.03.2017 06:39
quelle