2017-03-12 59 views
8

Jestem nowy w uczeniu maszynowym, więc proszę bardzo, jeśli problem jest banalny.Przewidywanie sekwencji postaci?

Dostałem sekwencję obserwowanych znaków, powiedz: ABABBABBB ..... (n znaków). Moim celem jest przewidywanie kolejnych postaci przez niektóre "uczące się" mechanizmy. Moje ograniczenia polegają na tym, że obeserved postacie (dane treningowe?) Nie są zbyt duże, tzn. Mam sekwencję o długości 6000, aby nauczyć się podstawowej interpretacji.

Jestem bardzo zdezorientowany, jaką strategię zastosować, aby rozwiązać ten problem. zakłady są: 1) jakiś rodzaj modelu ngram? 2) Sieci neuronowe (np. LSTM) itp.? 3) HMM

Czy możesz podać wskazówki dotyczące właściwego podejścia do rozwiązania tego problemu?

+0

Czy podstawowy wzór sekwencji jest stały? (lub zmienia wzór na sekwencję/dane wejściowe) –

+0

Nie znam wzoru, jest to coś, czego chcę się nauczyć. – suzee

+1

Ile znaków jest w alfabecie? Po prostu "A" i "B"? Czy możesz przesłać swoje dane? – Hossein

Odpowiedz

2

Jeśli masz do czynienia z dość trywialnym schematem, w którym litery są oparte tylko na poprzednim, to jesteś na miejscu, że Hidden Markov Model (HMM) rozwiąże go - w rzeczywistości coś tak prostego, jak a Markov Chain będzie działać.

Jeśli chcesz się trochę zabawić, oto niestandardowe rozwiązanie oparte na HMM, z którym możesz się bawić.


Przejrzyj przykładowe dane i utwórz połączoną listę każdego elementu w kolejności, w jakiej zostały wstawione. Teraz utwórz kolejną listę dla każdego innego znaku i umieść indeks każdego elementu listy, do którego należy. Oto (bardzo źle sporządzone) Wizualna reprezentacja połączonej listy i wiadra pod nim:

Linked list above arrays

Teraz, kiedy są przedstawiane sekwencję, i poprosił, aby przewidzieć następny znak, wszystko co musisz zrobić, to spojrzenie na najnowsze znaki X i zobacz, jak działały pod-sekwencje, które były podobne.

Aby użyć powyższego przykładu, spójrz na najnowsze (ostatnie) 3 znaki, aby uzyskać BAC. Chcesz sprawdzić, czy sekwencja BAC kiedykolwiek się wydarzyła i co przyszło po niej, kiedy to się stało. Jeśli sprawdzisz wiadro dla pierwszej litery z BAC (B), zobaczysz, że litera B pojawiła się wcześniej. Na szczęście postępuje zgodnie z kolejnością - i po nim przyszedł A, więc będzie to przewidywanie.


Możesz chcieć sprawdzić nie tylko sekwencje minionym X, ale również każda liczba poniżej X, dając każdemu z nich mniejszą wagę, jeżeli sekwencja zapałki, aby stworzyć lepsze heurystyki.

Trudną częścią jest określenie, jak daleko w tyle - jeśli spojrzysz za daleko, zajmie to zbyt dużo czasu i możesz nie uzyskać żadnych dopasowań. Jeśli wyglądasz zbyt krótko, możesz pominąć wzór i musisz zgadywać.

Powodzenia - mam nadzieję, że jest to ładne i łatwe do wdrożenia i działa dla Ciebie.

3

Twój problem wygląda na analizę szeregów czasowych. W tym celu należy wziąć pod uwagę wykorzystanie statystyk i eksploracyjnej analizy danych (EDA) oprócz algorytmów uczenia maszynowego.

  1. Zacznę od przypisania liczb do znaków (A-> 1, B-> 2 itd.).Zazwyczaj nie zaleca się zamieniania zmiennych nominalnych (wartości bez porządku) na liczby porządkowe, (2 jest większe niż 1, ale jest "C" większe niż "A" lub "Czerwone" większe niż "zielone" ?!), ale w tym przypadku , zmieni to twój problem w bezwzględną analizę szeregu czasowego.

  2. Następnie wykorzystałbym kilka rutynowych metod EDA, takich jak analiza 4-plot lub autocorrelation. powie Ci to dużo o statystycznym zachowaniu danych, np. "czy jest średnia z przesunięciem danych?" lub "ile losowego może być zestaw danych?" Najprawdopodobniej lepiej byłoby podjąć decyzję, który algorytm uczenia maszynowego będzie używał w celu wykorzystania algorytmu ML. W zależności od tego, co możesz znaleźć w analizie EDA, możesz podjąć decyzję. Jeśli masz wysokie skorelowane dane (postrzegane z wykresu autokorelacji), to prawdopodobnie wybierzesz metodę przesuwania okna w selekcji cech, tj. Przyjmując, że każda wartość zależy od poprzednich wartości k (x_k = f(x_(k-1),x_(k-2),...,x_(k-m))). wartość "m" można wybrać, analizując wykres autokorelacji. Jeśli masz średnią kroczącą, dobrze byłoby najpierw nauczyć się średniej krzywej, a następnie nauczyć się offsetu każdej instancji od średniej. Jeśli zauważyłeś pewien stopień losowości albo na krzywej średniej, albo przesunięciu instancji, możesz chcieć wybrać podejście stochastyczne poprzez swój problem z prognozowaniem.

Ogólnie rzecz biorąc, filozofia EDA brzmi: "analiza powinna przyjść przed wyborem modelu" i myślę, że to prawda. Jeśli wiesz więcej o tym, z czym masz do czynienia, na pewno będziesz mieć lepsze zaproszenie do selekcji modelu