12.2 hello world!隐式马尔可夫

完整演示代码请见本书GitHub上的12-1.py。

1.导入相关库


print(__doc__)
import numpy as np
import matplotlib.pyplot as plt
from hmmlearn import hmm

2.训练模型


startprob = np.array([0.6, 0.3, 0.1, 0.0]) 
# The transition matrix, note that there are no transitions possible # between component 1 and 3 
transmat = np.array([[0.7, 0.2, 0.0, 0.1],[0.3, 0.5, 0.2, 0.0],
[0.0, 0.3, 0.5, 0.2],             [0.2, 0.0, 0.2, 0.6]]) 
# The means of each component 
means = np.array([[0.0,  0.0],
 [0.0, 11.0],
 [9.0, 10.0],
[11.0, -1.0]])
# The covariance of each component 
covars = .5 * np.tile(np.identity(2), (4, 1, 1))  
# Build an HMM instance and set parameters model = hmm.GaussianHMM(n_components=4, covariance_type="full")  
# Instead of fitting it from the data, we directly set the estimated # parameters, the means and covariance of the components 
model.startprob_ = startprob 
model.transmat_ = transmat 
model.means_ = means 
model.covars_ = covars

3.可视化


# Generate samples 
X, Z = model.sample(500)  
# Plot the sampled data 
plt.plot(X[:, 0], X[:, 1], ".-", label="observations", ms=6, mfc="orange", alpha=0.7)  
# Indicate the component numbers 
for i, m in enumerate(means):     
        plt.text(m[0], m[1], 'Component %i' % (i + 1),  size=17, horizontalalignment='center',    bbox=dict(alpha=.7, facecolor='w')) plt.legend(loc='best') 
plt.show()

结果如图12-4所示。

图12-4 HMM演示代码