[PYTHON] Ableiten der MAP-Schätzung von HMM mit OpenGM

Maximale posteriore Wahrscheinlichkeitsschätzung von Label-Serien mit HMM unter Verwendung der Python-Schnittstelle von OpenGM.

Vorbereitung


import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

import opengm

Die Daten sind wie folgt. Versuchen Sie die Ganzzahl und Glättung von Zeitreihendaten.

Daten


d = '17.2 19.7 21.6 21.3 22.1 20.5 16.3 18.4 21.0 16.1 17.5 18.5 18.4 18.3 16.0 21.2 18.8 24.3 23.3 20.5 16.9 22.4 20.1 24.5 24.2 22.7 19.6 23.6 23.3 24.6 25.0 24.3 22.2 22.7 19.5 20.5 17.3 17.2 22.0 20.9 21.5 22.3 24.0 22.4 20.2 15.7 20.4 16.3 17.7 14.3 18.4 16.6 13.9 15.2 14.8 15.0 11.5 13.4 13.5 17.0 15.0 17.5 12.3 11.8 14.5 12.4 12.9 15.8 13.8 11.4 6.5 5.9 7.2 5.6 4.6 7.5 8.9 6.6 3.9 5.7 7.3 6.1 6.8 3.1 2.6 7.9 5.2 2.0 4.0 3.4 5.7 8.1 4.7 5.4 5.9 3.6 2.9 5.7 2.1 1.6 2.3 2.4 1.2 4.2 4.2 2.4 5.6 2.5 3.0 6.1 4.9 7.1 5.0 7.2 5.2 5.1 10.4 8.3 6.9 6.8 7.8 4.2 8.0 3.2 7.9 5.9 9.5 6.4 9.2 11.7 11.6 15.5 16.7'
d = np.array([ float(c) for c in d.split()])

Erstellen Sie nun das HMM-Modell und führen Sie die Inferenz aus.

Lauf!


nNodes = d.shape[0] #Anzahl der Knoten.
nLabels = 20 #Anzahl der diskreten Klassen. 20
variableSpace = np.ones(nNodes)*nLabels #Anzahl der Beschriftungen für jeden Knoten. Trotzdem hier
gm = opengm.gm(variableSpace)

# unary
for i in range(nNodes):
    u = np.array([ abs(d[i] - j) for j in range(nLabels) ]) #Datenbegriff. Absoluter Wert der Differenz zum Etikett
    f = gm.addFunction(u)
    gm.addFactor(f, i)

# pairwise
p = 10 #Kosten, wenn die Klassen benachbarter Knoten unterschiedlich sind. (0 wenn gleich)
pairwise = np.array((np.ma.ones((nLabels,nLabels)) - np.eye(nLabels)) * p) #Paarweiser Begriff. 0 für das gleiche Etikett, p für verschiedene
f_pw = gm.addFunction(pairwise)
for i in range(nNodes-1):
    gm.addFactor(f_pw, [i, i+1]) #Festlegen der Kante, die die Knoten verbindet. Da es sich um ein HMM handelt, ist es eindimensional.

inf = opengm.inference.DynamicProgramming(gm=gm) #Inferenzalgorithmus: DP ist ausreichend, weil es eindimensional ist
inf.infer() #Inferenzausführung
res = inf.arg() #Ergebnisse sammeln

#Handlung.
plt.plot(d, label="data")
plt.plot(res, label="result")
plt.legend()

Unknown.png

Recommended Posts

Ableiten der MAP-Schätzung von HMM mit OpenGM
Ableiten der MAP-Schätzung von HMM mit PyStruct
So implementieren Sie "named_scope" von RubyOnRails mit Django
So installieren Sie OpenGM unter OSX mit Macports
So geben Sie die CSV eines mehrzeiligen Headers mit Pandas aus
Wie man strukturiertes SVM von ChainCRF mit PyStruct lernt
Zusammenfassung, wie der Status mit mehreren Funktionen geteilt wird
So schätzen Sie die Kerneldichte
Wie aktualisiere ich mit SQLAlchemy?
Wie man mit Theano besetzt
Wie mit SQLAlchemy ändern?
So trennen Sie Zeichenfolgen mit ','
Wie man RDP auf Fedora31 macht
Wie lösche ich mit SQLAlchemy?
So aktivieren Sie das Lesen / Schreiben von net.Conn mit golang, um mit dem Kontext abzubrechen
So zeigen Sie eine Liste der mit pyenv installierbaren Versionen an
So brechen Sie RT mit tweepy ab
So extrahieren Sie Funktionen von Zeitreihendaten mit PySpark Basics
[Rails] So zeigen Sie Google Map an
[Hugo] Zusammenfassung zum Hinzufügen von Seiten zu der mit Learn erstellten Site
Zusammenfassung der Verwendung von pandas.DataFrame.loc
So erhalten Sie die ID von Type2Tag NXP NTAG213 mit nfcpy
So verwenden Sie virtualenv mit PowerShell
So installieren Sie Python-Pip mit Ubuntu20.04LTS
Umgang mit unausgeglichenen Daten
Zusammenfassung der Verwendung von pyenv-virtualenv
Ich habe versucht, das Entwicklungsstartverfahren von Django kurz zusammenzufassen
Wie fange ich mit Scrapy an?
Erste Schritte mit Python
Umgang mit dem DistributionNotFound-Fehler
So überwachen Sie den Ausführungsstatus von sqlldr mit dem Befehl pv
Aufblasen von Daten (Datenerweiterung) mit PyTorch
Erklärt, wie TensorFlow 2.X mit der Implementierung von VGG16 / ResNet50 verwendet wird
Node.js: So töten Sie Nachkommen eines Prozesses, der von child_process.fork () gestartet wurde
So berechnen Sie das Datum mit Python
So installieren Sie den MySQL-Connector mit pip3
Zusammenfassung der Verwendung von csvkit
So verbinden Sie INNER mit SQL Alchemy
So installieren Sie Anaconda mit pyenv
[EC2] So machen Sie mit Selen eine Bildschirmaufnahme Ihres Smartphones
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
[Bilderkennung] Lesen des Ergebnisses der automatischen Annotation mit VoTT
Umgang mit SSL-Fehlern beim Herstellen einer Verbindung zu S3 mit Python boto
Wie man mit verstümmelten Charakteren in json von Django REST Framework umgeht
Zusammenfassung zum Erstellen einer LAMP + Wordpress-Umgebung mit Sakura VPS
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
[Blender] So legen Sie shape_key mit dem Skript fest
[Python] Zusammenfassung der Verwendung von Pandas
Wie man mit matplotlib mehrere Figuren betitelt
Wie man die schöne Suppeninstanziierung beschleunigt
So erhalten Sie die Eltern-ID mit sqlalchemy
Wie man lange Einschlüsse loswird
So fügen Sie ein Paket mit PyCharm hinzu
So überprüfen Sie die Version von Django
So installieren Sie CatBoost [Stand Januar 2020]
So installieren Sie DLIB mit aktiviertem 2020 / CUDA
Verwendung von ManyToManyField mit Djangos Admin