[PYTHON] Comment déduire l'estimation MAP de HMM avec PyStruct

Estimation de la probabilité postérieure maximale de la série d'étiquettes par HMM à l'aide de PyStruct.

Préparation


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

from pystruct.inference import inference_dispatch

Les données sont les suivantes. Essayez d'intégrer et de lisser les données de séries chronologiques.

Les données


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()])

Maintenant, construisez le modèle HMM et exécutez l'inférence. --Le terme de données (terme unaire) est le ndarray de (nombre de nœuds, nombre de classes)

Courir!


nClasses = 20 #Nombre de classes discrètes. 20
p = 10 #Coût lorsque les classes des nœuds adjacents sont différentes. (0 si identique)

#Terme de données. Valeur absolue de la différence avec l'étiquette
unaries = np.array([ [ abs(i-j) for j in range(nClasses) ]  for i in d  ])

#Terme par paires. 0 pour le même label, p pour différents
pairwise = np.array((np.ma.ones((nClasses, nClasses)) - np.eye(nClasses)) * p)

#Définition du bord qui relie les nœuds. Puisqu'il s'agit d'un HMM, il est unidimensionnel.
edges = np.array([ [i, i+1] for i in range(unaries.shape[0]-1) ])


#Exécution d'inférence. Puisque cette fonction maximise, nous ajoutons un moins aux unaryies et par paires.
res = inference_dispatch(-unaries, -pairwise, edges, inference_method='max-product')

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

Unknown.png

Recommended Posts

Comment déduire l'estimation MAP de HMM avec PyStruct
Comment déduire une estimation MAP de HMM avec OpenGM
Comment apprendre le SVM structuré de ChainCRF avec PyStruct
Comment spécifier des attributs avec Mock of Python
Comment implémenter "named_scope" de RubyOnRails avec Django
Comment générer un CSV d'en-tête multiligne avec des pandas
Résumé de la façon de partager l'état avec plusieurs fonctions
Comment estimer la densité du noyau
Comment mettre à jour avec SQLAlchemy?
Comment lancer avec Theano
Comment modifier avec SQLAlchemy?
Comment séparer les chaînes avec ','
Comment faire RDP sur Fedora31
Comment supprimer avec SQLAlchemy?
Comment afficher une liste des versions installables avec pyenv
Comment annuler RT avec Tweepy
Comment extraire des fonctionnalités de données de séries chronologiques avec les bases de PySpark
Python: comment utiliser async avec
[Rails] Comment afficher Google Map
[Hugo] Résumé de la façon d'ajouter des pages au site créé avec Learn
Résumé de l'utilisation de pandas.DataFrame.loc
Comment obtenir l'ID de Type2Tag NXP NTAG213 avec nfcpy
Pour utiliser virtualenv avec PowerShell
Comment installer python-pip avec ubuntu20.04LTS
Comment gérer les données déséquilibrées
Résumé de l'utilisation de pyenv-virtualenv
Comment démarrer avec Scrapy
Comment démarrer avec Python
Comment démarrer avec Django
Comment surveiller l'état d'exécution de sqlldr avec la commande pv
Comment augmenter les données avec PyTorch
Explique comment utiliser TensorFlow 2.X avec l'implémentation de VGG16 / ResNet50
Node.js: Comment tuer les descendants d'un processus démarré par child_process.fork ()
Comment calculer la date avec python
Comment installer mysql-connector avec pip3
Résumé de l'utilisation de csvkit
Comment INNER JOIN avec SQL Alchemy
Comment installer Anaconda avec pyenv
[Reconnaissance d'image] Comment lire le résultat de l'annotation automatique avec VoTT
Comment gérer l'erreur SSL lors de la connexion à S3 avec Python boto
Comment gérer les caractères déformés dans json de Django REST Framework
Résumé de la création d'un environnement LAMP + Wordpress avec Sakura VPS
Comment effectuer un traitement arithmétique avec le modèle Django
[Blender] Comment définir shape_key avec un script
[Python] Résumé de l'utilisation des pandas
Comment titrer plusieurs figures avec matplotlib
Comment se débarrasser des longues inclusions
Comment ajouter un package avec PyCharm
Comment vérifier la version de Django
Comment installer CatBoost [à partir de janvier 2020]
Comment installer DLIB avec 2020 / CUDA activé
Comment utiliser ManyToManyField avec l'administrateur de Django
Comment utiliser OpenVPN avec Ubuntu 18.04.3 LTS
Comment empêcher les mises à jour de paquets avec apt
Comment calculer Utiliser% de la commande df
Comment utiliser Ass / Alembic avec HtoA
Comment gérer les erreurs de compatibilité d'énumération