首页 > 其他分享 >机器学习之概率图模型PGM,看这一篇就够了!

机器学习之概率图模型PGM,看这一篇就够了!

时间:2024-10-12 13:22:43浏览次数:3  
标签:概率 一篇 模型 PGM 矩阵 就够 hmm 马尔可夫 np

第一部分:基本含义

能够通过微小的现象看到事物的本质

“见微知著,睹始知终”:见到事情的苗头,就能知道它的实质和发展趋势。看到开始就知道结局了。比喻小中见大、以小见大。

我们前面研究过朴素贝叶斯模型,但是人家是有各种独立分布的条件假设的,它无法处理又相互关联的特征属性,也无法计算条件概率和联合概率,但是我们的概率图模型可以。

probabilistic Graphical Model(PGM)-它就是用图来表示变量概率之间的依赖关系。

用于不确定性推理。

图模型就是用概率+图

 用这个图来刻画不同概率之间的关系,还能够进行高效的推理

左侧的叫做有向图,右侧的叫做无向图

图模型的分类:

上述的隐马尔可夫模型的具体图解为:

隐式链(上面一层y),显式链(下面这一层x):

第二部分:核心思想和原理

(1)有向图的基本性质

结点对应连续或离散随机变量,边表示概率关系,一般是条件概率分布

 在有向图里面,箭头的开始是父节点,箭头的结束是子节点

比如x2指向x1的这条边,就叫做p(x1|x2)

在有向图中,如果不存在回路,因此又叫做有向无环图模型DAG

其中左侧的这个比较容易误以为是环形图,但其实它不是,因为下面的这个环方向上不对,x3->x2->x6以及x3->x4->x5>x6环的起点和终点不一样,所以不叫环。

联合概率分布:

以我们上面的左侧那个有向图为例:

得到的联合概率展开式为:

(2)无向图的基本性质

结点对应连续或离散随机变量

边表示依赖关系(没有父和子的关系了)

任意两点之间都有边连接,则该节点子集为团clique

比如下面的这个红圈:

x2和x5和x6围成的这个团就叫做clique,但是x2,x3,x4,x5之间围的这个环就不行,因为x2和x4;两两之间没有连接。

好处就是这样的一个团可以简化成一个圆圈,也就是x2,x5,x6这仨能够用一个变量整体表示,简化格式。

比如:

那么就能够简化成:

在计算概率的时候:

就可以有以下公式:

因为XA,XB,XC是相互独立的个体了,所以可以直接这样拆分。

无向图的最终目标也是求联合概率分布:

(3)有向图和无向图之间的相互转化

①有向图转化成无向图

左侧有向图到右侧无向图的转化过程中,需要加上让它能够形成一个团。

②无向图转化成有向图

(4)主要步骤

①表示

表示就是求出上面我们说的联合条件概率分布以及它的展开式。

比如:

这个里面叫做条件概率分布,这个里面单独的就叫做边缘概率分布,这个求解的过程就叫做“边缘化”

②推断

有了图模型就可以求节点的联合概率分布,根据这个分布再去求条件概率分布和边缘概率分布,

上面整个不断展开求解的过程就叫做推断了。

推断方法:

近似推断主要用的思想就是逼近。

③学习

学习就是参数估计的过程,诸如使用一些MLE,MAP的方法

第三部分:期望最大化EM算法参数估计(Expectation Maximization)

先以一个求隐马尔科夫模型的简单例子:

得到的公式:

如果我们知道z的值,那么我们就可以通过使用最大似然估计MLE来求解;

但是如果我们不知道z的值,就只能通过使用EM来求解了!

我们就是想着让这个蓝色的图像能够尽可能去拟合这个红色的线(似然函数)

迭代的过程就类似于爬楼梯的过程,最终到达顶端(跟梯度下降不断逼近的思想也比较像)。

EM算法缺点:

可能陷入局部最优;同时它收到初始值的影响

第四部分:隐马尔可夫模型代码实现

隐马尔可夫的内容在前面“第一部分”里面。

现实生活中的数据分为无序数据和序列数据,比如鸢尾花数据集,打乱鸢尾花数据集的先后顺序,并不会对结果产生影响;但对于序列数据,比如前一天的股票趋势会影响今天的股票趋势,语言中的数据,一句话中的词,前面的词会对后面词的含义产生影响。

隐马尔可夫模型就是对序列数据进行求解建模的的一类算法。

隐马尔可夫模型的两大基本假设:

限制的是上下关系(s在上,o在下)。

限制的是马尔科夫链的前后关系。

(1)具体案例

①问题

②流程图

 ③隐藏结果S的分类

④观测状态o的分类

⑤隐藏状态之间的转换关系(马尔科夫链)(第一行的左右关系)

⑥观测结果和隐藏结果之间的对应关系(第二层和第一层之间的关系)

(2)隐马模型三要素

①状态初始概率

也就是小明是状态S1,S2,S3的概率各是1/3

②状态转移矩阵

也就是小明从一种状态转移到另一种状态的概率,也就是对应到隐马尔可夫模型的第一层的隐马尔可夫链上的前后关系:

横纵轴就是代表了三种概率。

对应的就是:

③发射概率矩阵

也就是可能性,根据隐藏状态s求观测状态o的概率,这里面的值我们做了一个平均:

对应的就是:

(3)具体数据

(4)手动计算状态结果

我们先来手算一下隐状态:

总共有以下这么多种可能(先不要考虑细节数据,先掌握解题思想流程):

我们可以看到上面黑色的线就是可能走的线,然后,从t0走到t4我们计算每一条路径下的权重概率大小,最终取最大的:

也就是说,我们预测的结果是:

因此我们可以说,小明这位同学在t0,t1,t2,t4都是认真复习的状态,而t3是没有复习的状态

值得注意的是,我们预测未来的结果的概率会随着时间的增加,概率值变得越来越小,不确定性越来越大。

(5)python代码实现上述结果

首先我们需要安装hmmlearn库,专门用来实现隐马尔克夫模型,安装过程见我博客:

隐马尔可夫模型:hmmlearn库的下载安装-CSDN博客

①导包

#第一部分:导包
import numpy as np

②创建数据集

#第二部分:创建数据集(①初始概率矩阵②转移矩阵③发射矩阵)
state = np.array(['认真复习', '简单复习', '没有复习'])
grade = np.array(['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-'])
n_state = len(state)
m_grade = len(grade)
pi = np.ones(n_state) / n_state
t = np.array([
    [0.4, 0.3, 0.3],
    [0.3, 0.4, 0.3],
    [0.3, 0.3, 0.4]
])
e = np.zeros((3, 9))
e[0, :9] = 1/9
e[1, 3:9] = 1/6
e[2, 5:9] = 1/4
print("初始概率矩阵: \n", pi)
print("转移矩阵: \n", t)
print("发射矩阵: \n", e)

③使用隐马尔可夫模型计算结果

#第三部分:使用隐马尔可夫模型预测结果
from hmmlearn.hmm import CategoricalHMM
hmm = CategoricalHMM(n_state)#分类隐马尔可夫模型(Categorical Hidden Markov Model)
hmm.startprob_ = pi#初始概率矩阵
hmm.transmat_ = t#转移矩阵
hmm.emissionprob_ = e#发射矩阵
hmm.n_feature = 9#特征的数量,也就是o的数量
datas = np.array([0, 4, 2, 6, 1])#观测的o结果,分别对应:o1	o5	o3	o7	o2
datas = np.expand_dims(datas, axis=1)
states = hmm.predict(datas)
print(states)#输出结果为:[0 0 0 2 0],分别对应s1	s1	s1	s3	s1

分别对应s1    s1    s1    s3    s1

因此结果正确。

④完整pycharm代码

#第一部分:导包
import numpy as np
#第二部分:创建数据集(①初始概率矩阵②转移矩阵③发射矩阵)
state = np.array(['认真复习', '简单复习', '没有复习'])
grade = np.array(['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-'])
n_state = len(state)
m_grade = len(grade)
pi = np.ones(n_state) / n_state
t = np.array([
    [0.4, 0.3, 0.3],
    [0.3, 0.4, 0.3],
    [0.3, 0.3, 0.4]
])
e = np.zeros((3, 9))
e[0, :9] = 1/9
e[1, 3:9] = 1/6
e[2, 5:9] = 1/4
print("初始概率矩阵: \n", pi)
print("转移矩阵: \n", t)
print("发射矩阵: \n", e)
#第三部分:使用隐马尔可夫模型预测结果
from hmmlearn.hmm import CategoricalHMM
hmm = CategoricalHMM(n_state)#分类隐马尔可夫模型(Categorical Hidden Markov Model)
hmm.startprob_ = pi#初始概率矩阵
hmm.transmat_ = t#转移矩阵
hmm.emissionprob_ = e#发射矩阵
hmm.n_feature = 9#特征的数量,也就是o的数量
datas = np.array([0, 4, 2, 6, 1])#观测的o结果,分别对应:o1	o5	o3	o7	o2
datas = np.expand_dims(datas, axis=1)
states = hmm.predict(datas)
print(states)#输出结果为:[0 0 0 2 0],分别对应s1	s1	s1	s3	s1

(6)隐马尔可夫模型的优缺点

①优点

一阶马尔科夫假设和观测独立假设

很多场景下大大简化条件概率计算

②缺点

应用范围比较窄,主要用于时序数据建模。

第五部分:概率图模型的优缺点

(1)优点

思路清晰:建模表示+推断学习

可解释性强,属于白盒子模型

(2)缺点

推断和学习复杂,高维数据处理困难

标签:概率,一篇,模型,PGM,矩阵,就够,hmm,马尔可夫,np
From: https://blog.csdn.net/weixin_74009895/article/details/142865516

相关文章