HMM与CRF

HMM(隐马尔科夫模型)
1、 知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道每次掷出来的是哪种骰子(隐含状态链)。
在语音识别领域叫做解码问题。
(1) 求最大似然路径状态,通俗来说,就是我求一串骰子序列,这串骰子序列产生观测结果的可能性最大。
(2) 不是求一组骰子序列,而是求每次掷出的骰子分别是每种骰子的概率。
2、 还是知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道掷出这个结果的概率。
3、 知道骰子有几种(隐含状态数量),不知道每种骰子是什么(转换概率),观测到很多次掷骰子的结果(可见状态链),我想反推每种骰子是什么(转换概率)

案例:
先看一下数据集
HMM与CRF_第1张图片
该文件是带逗号分隔符的行。每行包括3个值:一个年份、一个月份和一个浮点型数据。

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

# Load data from input file
input_file = 'data_hmm.txt'
data = np.loadtxt(input_file, delimiter=',')

# Arrange data for training 
X = np.column_stack([data[:,2]])

# Create and train Gaussian HMM 
print "\nTraining HMM...."
#用4个成分创建并训练HMM。成分的个数是一个需要进行选择的参数。这里选择4个成分,也就意味着用4个潜在状态生成数据
num_components = 4
model = GaussianHMM(n_components=num_components, covariance_type="diag", n_iter=1000)
model.fit(X)

# Predict the hidden states of HMM 
#结果值有4种
hidden_states = model.predict(X)

#计算这些隐藏状态的均值和方差
print "\nMeans and variances of hidden states:"
for i in range(model.n_components):
    print "\nHidden state", i+1
    print "Mean =", round(model.means_[i][0], 3)
    #diag:以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
    print "Variance =", round(np.diag(model.covars_[i])[0], 3)

# Generate data using model
num_samples = 1000
samples, _ = model.sample(num_samples) 
plt.plot(np.arange(num_samples), samples[:,0], c='black')
plt.title('Number of components = ' + str(num_components))

plt.show()

HMM与CRF_第2张图片

HMM与CRF_第3张图片

条件随机场(CRF)是一种判别式无向图模型,该模型用于分析结构化数据。条件随机场常用于标记和分段序列数据。条件随机场与隐马尔科夫模型相反,它是一个判定模型,而隐马尔科夫是一个生成模型

生成模型是直接对联合分布进行建模,而判别式模型是对条件分布建模。隐马尔科夫模型假设当前的输出是与之前的输出独立统计的。然而,这个假设并不总是成立。时间序列输出往往取决于之前的输出。条件随机场模型优于隐马尔科夫模型的一点在于它们是由自然条件决定的,也就是说,条件随机场模型并不假设输出观察值之间的独立性。

HMM广泛用于金融、语音分析、天气预测、单词序列等领域。
CRF用于分析结构化数据,在语言学、生物信息学、语音分析等领域都优于HMM。

你可能感兴趣的:(速查知识)