统计学习方法 第十一章 条件随机场

条件随机场(CRF,conditional random field)是给定一组输入随机变量下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔科夫随机场。通过概率无向图可以描述条件随机场。通常考虑线性链的情况。
条件随机场有3种形式进行描述,分别是参数化形式、简化形式以及矩阵形式。参数化形式中,转移特征及对应权值、状态特征及对应权值均在表达式中给出;简化形式及把两个特征合并到一起,并以向量进行表示;矩阵形式中,通过引进特殊的起点y0=start和终点y(n+1)=stop,每个位置y(i-1)和y(i)在m个标记中的取值以矩阵表示,就可以计算标注序列的概率。
三个问题:概率计算问题、学习问题、预测问题。概率计算问题中,采用和隐马尔可夫模型里相似的前向后向算法,可以计算对应的条件概率及对应的数学期望。
学习问题也即求条件随机场模型问题,可以通过改进的迭代尺度法IIS,梯度下降法以及拟牛顿法获得。
预测问题,即给定条件随机场和输入序列(观测序列)x,求条件概率最大的输出序列(标记序列)y*。算法也和HMM类似,使用的viterbi算法获得非规范化概率最大的最优路径问题。
现简单实现条件随机场下的viterbi算法,假设输入为S0的状态序列及t个m阶n列的矩阵列表:

import numpy as np

def viterbiCrf(dataInit,dataMatList):
    m,n = np.shape(dataMatList[0])
    #取随机矩阵的维数
    t = len(dataMatList)
    matResCal = np.zeros((m,t + 1))
    matRoute = np.zeros((m,t + 1))
    #初始化
    matResCal[:,0] = dataInit
    matRoute[:,0] = np.mat(list(range(1,m + 1)))
    for i in range(1,t + 1):
        for j in range(n):
            #这里只需要将对应位置的特征相加即可
            resCal = np.add(np.mat(matResCal[:,i -1]).T,dataMatList[i - 1][:,j])
            matResCal[j,i] = np.max(resCal)
            matRoute[j,i] = np.argmax(resCal) + 1
    
    return matResCal,matRoute

以书上的例子进行输入:

dataInit = [1,0.5]
matM1 = np.mat([[1.4,1.5],[1.8,0.5]])
matM2 = np.mat([[0.8,1.5],[1.8,0.7]])
dataMatList = [matM1,matM2]
matResCal,matRoute = viterbiCrf(dataInit,dataMatList)
print(matResCal)
print(matRoute)

可以获得结果:
[[1. 2.4 4.3]
[0.5 2.5 3.9]]
[[1. 1. 2.]
[2. 1. 1.]]
而第二个路径矩阵可以得知,最优路径y*=(1,2,1)
故对于习题11.4,将矩阵稍作变化,有:

dataInit = [0.5,0.5]
matM1 = np.mat([[0.3,0.7],[0.7,0.3]])
matM2 = np.mat([[0.5,0.5],[0.6,0.4]])

替换掉刚才的数据,可以得到:
[[0.5 1.2 1.8]
[0.5 1.2 1.7]]
[[1. 2. 2.]
[2. 1. 1.]]
同样最优路径为y*=(1,2,1)

你可能感兴趣的:(统计学习方法,python,机器学习,算法)