Skica e modelit të fshehur Markov është theksuar më poshtë.

  • Sfondi
  • Shembull HMM
  • Tre elementë të HMM
  • Aplikim në Python

Modeli i fshehur i Markovit është një proces i dyfishtë Stokastik, ku një nga proceset themelore është i fshehur. Procesi i fshehur është një zinxhir Markov që lëviz nga një gjendje në tjetrën, por nuk mund të vëzhgohet drejtpërdrejt. Procesi tjetër është i vëzhgueshëm, por lëvizja e tij varet nga gjendja e fshehur. Modeli i fshehur Markov është një degë e mësimit të makinerive. është i dobishëm në zgjidhjen e problemeve që lidhen me sekuencën.

Zinxhiri Markov është një proces stokastik diskret, ku probabiliteti i ndodhjes së një ngjarjeje varet vetëm nga ngjarja menjëherë e mëparshme. Kryesisht përdoret aty ku ka sekuenca ngjarjesh që ndodhin. Një nga rastet e përdorimit të njohur është parashikimi i motit.

  • Shembull HMM

Aplikimi i HMM do të bazohej në veprim real, le të themi se janë tre veprime që një person mund të bëjë në varësi të "shëtitjes", "Blini" dhe "Udhëtimit" të motit.

  • Terminologjia dhe llogaritjet:

  • HMM, tre elementë:

Për të modeluar HMM duhet të kalojmë nëpër tre algoritme.

Algoritmi përpara-prapa: Është faza e vlerësimit ku llogaritet probabiliteti i sekuencës së vëzhgimit.

Algoritmi Baum-Welch: Është një fazë mësimi për përcaktimin e parametrave të modelit.

Algoritmi Viterbi: Dekodimi i sekuencës më të mundshme të gjendjes.

  • Algoritmi përpara-prapa:

Algoritmi Forward-Backward llogarit margjinalet e pasme (probabiliteti i përditësuar i një ngjarjeje të ndodhur pas marrjes në konsideratë të informacionit të ri.) të të gjitha variablave të gjendjes së fshehur.

Algoritmi përdor dy kalime, e para shkon përpara në kohë dhe kalimi i dytë shkon prapa.

Kalimi i parë llogarit një grup probabiliteti që siguron probabilitetin për të përfunduar në një gjendje të caktuar.

Kalimi i dytë llogarit një grup probabilitetesh të prapambetura të cilat ofrojnë probabilitetin e vëzhgimit të vëzhgimit të mbetur duke pasur parasysh çdo pikënisje.

Në thelb, ky algoritëm përdoret për të gjetur gjendjen më të mundshme për çdo moment në kohë.

  • Algoritmi Baum-Welch:

Ky algoritëm merret me parametra të panjohur të një modeli të fshehur Markov.

Është një rast i Algoritmit E-M (Maksimi i pritshmërive) i cili është një metodë për të gjetur vlerësimin maksimal.

Pjesa "E" e Pritshmërisë rivlerëson pi-në duke pasur parasysh parametrin aktual HMM.

Pjesa "M" e Maksimizimit, duke rivlerësuar parametrin HMM duke pasur parasysh gjendjen aktuale pi.

Në përfundim, algoritmi Baum-welch përpiqet të gjejë modelin që i cakton të dhënat e trajnimit gjasat më të larta.

  • Algoritmi Viterbi:

Algoritmi më i dobishëm është kur dikush dëshiron të llogarisë rrugën më të mundshme përmes tranzicionit të gjendjes.

Vëzhgimi i bërë nga ky algoritëm është se në çdo gjendje në kohën T, ka vetëm një rrugë më të mundshme për në atë gjendje.

Duke përdorur këtë algoritëm ne mund të gjejmë sekuencën më të mundshme të gjendjeve të fshehura duke pasur parasysh sekuencën e vëzhgimeve.

  • Aplikimi në Python:

Deri më tani ne kemi vëzhguar se si funksionon i gjithë ky algoritëm i mësimit të makinës. Shembulli që kemi kaluar (Parashikimi i motit) është i natyrës diskrete. Kthimet e aksioneve janë të vazhdueshme në natyrë dhe zhurma e rastësishme është tashmë e pranishme atje. Për të modeluar zhurmën e rastësishme duhet të përdorim modelin Gaussian dhe i cili merr dy hyrje mesatare dhe variancë. Të dhënat e vëzhguara janë të Indeksit NIFTY (National Stock Exchange of India). Seti i të dhënave është i të dhënave për 10 vitet e fundit (2011–2020) me intervale 15 minutash.

Kodi shumë i thjeshtë i pa optimizuar për perspektivën e ilustrimit është paraqitur më poshtë.:

import datetime
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import hmmlearn as hmm
from hmmlearn.hmm import GaussianHMM

# Extract required information for modelling.
dates = np.array(raw_data['Date/Time'])
close_price = np.array(raw_data['Close'])
volume = np.array(raw_data['Volume'])

# Take a difference of Closing price and compute rate of change.
diff_percentage = 100.0*np.diff(close_price)/close_price[:-1]
dates = dates[1:]
volume = volume[1:]

#Stack percentage difference and volume for columnwise for training.
X = np.column_stack([diff_percentage,volume])

# Create and train Gaussian HMM.
model = GaussianHMM(n_components = 5, covariance_type="diag", n_iter=1000)
model.fit(X)

# Generate data using model.
num_samples = 25
samples,_ = model.sample(num_samples)
plt.plot(np.arange(num_samples), samples[:,0], c='blue')
plt.show()

Rezultati i mësipërm tregon përafrim të afërt, megjithatë ka nevojë për rregullim të mëtejshëm për të pasur rezultate më të sakta.

Mirënjohje: