Verwendung von hmmlearn, einer Python-Bibliothek, die versteckte Markov-Modelle realisiert

Ich konnte die japanischen Informationen von hmmlearn nicht finden und habe die Mindestnutzung zusammengefasst.

hmmlearn ist eine Python-Bibliothek, die Scicit-Learn ähnelt und HMM (Hidden Markov Model) realisiert. http://hmmlearn.readthedocs.org

installieren

Die folgende Installation ist erforderlich.

Installation

hmmlearn kann mit pip installiert werden.

$ pip install -U --user hmmlearn

Wie benutzt man

Dieses Mal werden wir Gaußsches HMM verwenden.

Was ist Gaußsches HMM?

Dies ist ein verstecktes Markov-Modell, bei dem die Ausgabe des Modells ein kontinuierlicher Wert ist.

Erforderliche Parameter

Erstellen Sie eine Modellinstanz mit der folgenden Methode.

from hmmlearn import hmm

model = hmm.GaussianHMM(n_components=3, covariance_type="full")

Das Argument n_componets gibt die Anzahl der Zustände an, und covariance_type gibt den Typ der Kovarianz an.

Folgende Attribute müssen angegeben werden.

Diesmal wird im Beispiel die Anzahl der Zustände auf 5 gesetzt und die Parameter eingegeben.

import numpy as np
from hmmlearn import hmm


startprob = np.array([0.0, 0.1, 0.8, 0.1, 0.0])
transmat = np.array([[0.9, 0.1, 0.0, 0.0, 0.0],
                     [0.4, 0.3, 0.3, 0.0, 0.0],
                     [0.1, 0.2, 0.4, 0.3, 0.0],
                     [0.0, 0.1, 0.3, 0.3, 0.3],
                     [0.0, 0.0, 0.3, 0.1, 0.6]])

means = np.array([[1.0, 1.0],
                  [2.0, 2.0],
                  [3.0, 3.0],
                  [4.0, 4.0],
                  [5.0, 5.0]])

covars = 0.1 * np.tile(np.identity(2), (5, 1, 1))

model = hmm.GaussianHMM(n_components=5, covariance_type="full")

model.startprob_ = startprob
model.transmat_ = transmat
model.means_ = means
model.covars_ = covars

Prognose

Lassen Sie uns die Zustandsreihen mit Beispieldaten vorhersagen.

>>> X, Z = model.sample(10)

>>> print(X)
[[ 3.42184743  2.84259768]
 [ 1.83591345  2.60456015]
 [ 3.0610817   3.67242462]
 [ 3.88970955  3.94599461]
 [ 4.99679025  5.21663028]
 [ 5.05294062  4.80691392]
 [ 5.25836686  5.08960965]
 [ 5.49849546  5.00469741]
 [ 5.31740667  4.77140169]
 [ 4.1283215   5.06959465]]

>>> print(Z)
[2 1 2 3 4 4 4 4 4 4]

Dies ist das Ergebnis, dass die Zustandsreihe als Z vorhergesagt wird, wenn die Probendaten X sind.

Lassen Sie uns die Zustandsreihen anhand von Nicht-Stichprobendaten vorhersagen. Verwenden Sie die Vorhersagemethode, um eine Zustandssequenz basierend auf einer Ausgabesequenz vorherzusagen.

>>> model.predict([[1.3], [2.0], [4.3], [4.2]])
array([1, 2, 3, 3])

Lernen

Ich werde Ihnen zeigen, wie Sie die Parameter durch Lernen schätzen können.

Das Training wird nach der Anpassungsmethode durchgeführt und die Parameterschätzung wird durchgeführt. Dieses Mal wird X als Trainingsdaten verwendet.

import numpy as np
from hmmlearn import hmm

model = hmm.GaussianHMM(n_components=5, covariance_type="full")
X = np.array([[1.2], [2.3], [1.1], [4.2], [3.3]])
model.fit(X)

Sie können durch Lernen bestätigen, dass die Parameter eingegeben wurden.

>>> model.startprob_
array([  2.06946712e-292,   0.00000000e+000,   3.13184994e-003,
         1.27702612e-300,   9.96868150e-001])
        
>>> model.means_
array([[ 2.3       ],
       [ 4.2       ],
       [ 1.10171369],
       [ 3.3       ],
       [ 1.15485602]])
       
>>> model.covars_
array([[[ 0.01      ]],
       [[ 0.01      ]],
       [[ 0.05488646]],
       [[ 0.01      ]],
       [[ 0.00797925]]])
       
>>> model.transmat_
array([[  1.27206138e-223,   1.57268167e-192,   1.79623272e-001,
          9.10036066e-211,   8.20376728e-001],
       [  5.88225536e-075,   2.07494122e-025,   1.88590294e-063,
          1.00000000e+000,   5.18696363e-119],
       [  1.71368655e-002,   9.82863134e-001,   6.65061859e-190,
          9.25847733e-045,   3.48719264e-293],
       [  1.79414943e-074,   2.06495338e-025,   3.28132831e-011,
          1.00000000e+000,   1.50081312e-010],
       [  5.48560165e-001,   4.51439835e-001,   1.32144625e-190,
          6.49028218e-045,   0.00000000e+000]])

Auswertung

Finden Sie die logarithmische Wahrscheinlichkeit, das Modell zu bewerten.

Die Bewertungsmethode bewertet das Modell. Geben Sie die Ausgabeserie für die Auswertung als X an.

>>> X = np.array([[3.2], [2.4], [3.1], [3.2], [3.0], [3.9], [4.0]])
>>> model.score(X)
0.11878179338435844

Export und Import

Exportiert und importiert das Modell.

Sie können das Modell mithilfe der Joblib von sklearn exportieren.

>>> from sklearn.externals import joblib
>>> joblib.dump(remodel, "filename.pkl")
["filename.pkl"]

Ebenso kann es von der Lademethode mit joblib gelesen werden.

>>> from sklearn.externals import joblib
>>> joblib.load('filename.pkl')
GaussianHMM(algorithm='viterbi', covariance_type='full', covars_prior=0.01,
      covars_weight=1, init_params='stmc', means_prior=0, means_weight=0,
      min_covar=0.001, n_components=5, n_iter=10, params='stmc',
      random_state=None, startprob_prior=1.0, tol=0.01, transmat_prior=1.0,
      verbose=False)

Recommended Posts

Verwendung von hmmlearn, einer Python-Bibliothek, die versteckte Markov-Modelle realisiert
Verwendung von Anfragen (Python Library)
Verwendung der C-Bibliothek in Python
Verwendung der Python-Bildbibliothek in der Python3-Serie
So installieren Sie die Python-Bibliothek, die von Pharmaunternehmen verwendet werden kann
[Python] Verwendung der Diagrammerstellungsbibliothek Altair
[Python] So schreiben Sie eine Dokumentzeichenfolge, die PEP8 entspricht
[Python] Eine praktische Bibliothek, die Kanji in Hiragana konvertiert
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
Verwendung von pip, einem Paketverwaltungssystem, das für die Verwendung von Python unverzichtbar ist
So verwenden Sie eine Bibliothek, die ursprünglich nicht in Google App Engine enthalten war
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
Verwendung der Methode __call__ in der Python-Klasse
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
Verwenden Sie Pymol als Python-Bibliothek
Python: So verwenden Sie Async mit
[Python] Verwendung der Pandas-Serie
Verwendung von SQLite in Python
[Python] Verwendung von Liste 3 Hinzugefügt
Wie man MySQL mit Python benutzt
Verwendung der Python-API von OpenPose
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
Verwendung von PubChem mit Python
Verwendung der Zip-Funktion von Python
[Python] Verwendung der Typetalk-API
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Verwenden Sie networkx, eine Bibliothek, die Diagramme in Python verarbeitet (Teil 2: Lernprogramm).
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Wie man eine schreckliche Bibliothek austrickst und benutzt, die global in einer Flasche aufbewahrt werden soll
[Einführung in Python] Wie verwende ich eine Klasse in Python?
[Python] Extrahiere △△ mit maximalem ○○ mit Pandas
So installieren und verwenden Sie pandas_datareader [Python]
[Python] Wie man eine Klasse iterierbar macht
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
[Python] Verwendung von __command__, Funktionserklärung
[Python] So invertieren Sie eine Zeichenfolge
Wie bekomme ich Stacktrace in Python?
[Python] Organisieren der Verwendung für Anweisungen
Memorandum über die Verwendung von Gremlin Python
[Python2.7] Zusammenfassung der Verwendung von unittest
Python: Verwendung von Einheimischen () und Globalen ()
Verwendung von __slots__ in der Python-Klasse
Verwendung von "deque" für Python-Daten
Verwendung von Python zip und Aufzählung
[Python] Verstehen, wie rekursive Funktionen verwendet werden
Zusammenfassung der Verwendung der Python-Liste