学习了隐马尔科夫模型至今也有一些时日了,前一阵子由于会错了女朋友的意思,搞得心里有些芥蒂,虽然没有掀起什么波澜,但这却引起了我对人生的思考:
如何通过这件事让我们更好地理解隐马尔可夫模型呢?
首先我们来讲一个故事:
故事的主人公是我们的朋友小丁,小丁同学最近交了一个女朋友芳名李建钢,两个人平日里感情还挺不错。这天下午,小丁和李建钢在公园散步,路上遇到了小丁的前女友,赵铁柱,两人一见面,竟热情的聊起来。
李建钢在一旁心中满是尴尬,但还是礼貌的小丁的前女友说了声“你好”
小丁见状,心中不禁为女朋友的“大度 ”点了个赞,转过头来,邀请赵铁柱和他们一起出游。
李建钢心中不乐意了,但是一时找不到什么理由拒绝,在大庭广众之下也不好发脾气,从牙缝中挤出一句“多一个人也热闹点”。
小丁这时候还没有意识到事情的严重性,心里感激涕零,暗暗赞赏自己现女友的与众不同。三个人就这么度过了一个“愉快”的下午。
晚上各自回到家之后,李建钢越想越气,觉得自己没有受到起码的尊重,最后觉得这样的男友扔了也罢,反手一条微信,发了一句“你是个好人”,然后就将小丁删除、拉黑了。
小丁回到家里,还在回味今天的偶遇,也不禁啧啧赞叹李建钢表现的“大度”,这时手机收到李建钢的消息。
“我是个好人?交往了这段时间,这个女人总算明白我和那些渣男不一样了!”小丁乐开了花,关上灯,闭上眼睛,寻思着明天一定要给李建钢带的煎饼果子中多加一个蛋,脑海中已然浮现出李建钢那幸福的表情。
现在我们分析一下这个故事,走进小丁这个笨蛋的内心世界。
废话不多说,推理开始~
首先,不难看出,如果我们用马尔科夫模型来描述这个故事,那么“李建钢说的话”就可以看作观测序列,表示为 O O O,这个是小丁同学可以观察到的;而“李建钢内心的想法”就可以看作状态序列,表示为 I I I,这是小丁同学所看不到的。
I
=
(
i
1
,
i
2
,
i
3
)
O
=
(
o
1
,
o
2
,
o
3
)
I=(i_1,i_2,i_3)\\ O=(o_1,o_2,o_3)
I=(i1,i2,i3)O=(o1,o2,o3)
所有可能的状态的集合,就是李建钢的想法,可以简化为“生气”和“不生气”,用
Q
Q
Q表示;
Q
=
(
"
生
气
"
,
“
不
生
气
”
)
Q=("生气",“不生气”)
Q=("生气",“不生气”)
所有可能的观测的集合,就是李建刚说的话,也可以简化为“好话”和“气话”,用
V
V
V表示。
Q
=
(
"
好
话
"
,
“
气
话
”
)
Q=("好话",“气话”)
Q=("好话",“气话”)
根据观察,可以知道观测序列:
O
=
(
“
好
话
”
,
“
好
话
”
,
“
好
话
”
)
O=(“好话”,“好话”,“好话”)
O=(“好话”,“好话”,“好话”)
李建钢可能属于讨好型人格,说的全是“好话”~
我们知道隐马尔可夫模型的三要素: λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)。在这件事情中,三要素中的概率不去通过算法计算,而是使用生活的常识,对女孩子的心思有个先验的概率估计。
李建钢是一个不错的女孩,但是有着很强的自尊心,所以偶遇小丁的前女友,虽然有一点点尴尬,但是还是保持礼貌的微笑,并且大方地打了招呼,可以猜测,遇到这种情况,李建钢会有0.6的概率生气,有0.4的概率不会生气。
π
\pi
π就可以表示为:
π
=
(
0.6
0.4
)
\pi= \begin{pmatrix} 0.6\\0.4 \end{pmatrix}
π=(0.60.4)
和一些女孩子一样,当李建钢生气的时候,说的话总是让人捉摸不定,说好话和气话的概率各位0.5;当她不生气的时候,说好话的概率是0.9,说气话的概率是0.1,这0.1的气话可以理解为偶尔撒撒娇。那么
B
B
B就可以表示为:
B
=
(
0.5
0.5
0.9
0.1
)
B= \begin{pmatrix} 0.5&0.5\\0.9&0.1 \end{pmatrix}
B=(0.50.90.50.1)
A
A
A的情况有些复杂,如果小丁当时察觉到女朋友生气了,开始和女友好好沟通,并与前女友保持距离,那么李建钢由生气转换成继续生气的概率是0.4,同时有0.6的概率被哄好,由不生气转换成生气的概率是0.3,由不生气保持不生气的概率是0.7,这时
A
A
A表示为
A
1
A_1
A1:
A
1
=
(
0.4
0.6
0.3
0.7
)
A_1= \begin{pmatrix} 0.4&0.6\\0.3&0.7 \end{pmatrix}
A1=(0.40.30.60.7)
但是小丁看起来不太聪明的亚子,并没有采用上述的方法,这时李建钢由生气转换成继续生气的概率是0.9,同时有0.1的概率被哄好,由不生气转换成生气的概率是0.9,由不生气保持不生气的概率是0.1,这时
A
A
A表示为
A
2
A_2
A2:
A
2
=
(
0.9
0.1
0.9
0.1
)
A_2= \begin{pmatrix} 0.9&0.1\\0.9&0.1 \end{pmatrix}
A2=(0.90.90.10.1)
我们知道了模型和观测序列,想要知道状态序列,这个问题属于隐马尔可夫模型基本问题中的预测问题。
下面我们来帮助小丁同学使用维特比算法推测状态序列,也就是李建钢内心真实的想法。
根据事情的经过不难看出,小丁果断采用的是第二种方案,即选择使用了
A
2
A_2
A2这个矩阵。
使用
δ
i
(
j
)
\delta_i(j)
δi(j)来表示状态为
j
j
j,第
i
i
i个时间的观测为“好话”的概率。状态1表示为“生气 ”,状态2表示“不生气”
δ
1
(
1
)
=
0.6
×
0.5
=
0.3
δ
1
(
2
)
=
0.4
×
0.9
=
0.36
\delta_1(1)=0.6×0.5=0.3 \\ \delta_1(2)=0.4×0.9=0.36
δ1(1)=0.6×0.5=0.3δ1(2)=0.4×0.9=0.36
取其中最高的数接着进行计算,这里可以看出,李建钢还算是一个大度的人,偶遇前女友之后还是可以大概率呈“不生气”的状态。接下来:
δ
2
(
1
)
=
0.36
×
0.9
×
0.5
=
0.162
δ
2
(
2
)
=
0.36
×
0.1
×
0.9
=
0.0324
δ
3
(
1
)
=
0.162
×
0.9
×
0.5
=
0.0729
δ
3
(
2
)
=
0.162
×
0.1
×
0.9
=
0.01458
\delta_2(1)=0.36×0.9×0.5=0.162 \\ \delta_2(2)=0.36×0.1×0.9=0.0324\\ \delta_3(1)=0.162×0.9×0.5=0.0729 \\ \delta_3(2)=0.162×0.1×0.9=0.01458
δ2(1)=0.36×0.9×0.5=0.162δ2(2)=0.36×0.1×0.9=0.0324δ3(1)=0.162×0.9×0.5=0.0729δ3(2)=0.162×0.1×0.9=0.01458
在坐标轴上的显示为:
经过分析我们知道,李建钢真正生气的点在于小丁竟然邀请前女友和他们一起出行,仔细一想,这个生气的理由很符合常理。而小丁竟然在这之后一错再错,最终酿成悲剧!
如果我们使用第一种情况,使用“哄+好好沟通+和前女友保持距离”的 策略,再来进行计算:
δ
1
(
1
)
=
0.6
×
0.5
=
0.3
δ
1
(
2
)
=
0.4
×
0.9
=
0.36
δ
2
(
1
)
=
0.36
×
0.3
×
0.5
=
0.054
δ
2
(
2
)
=
0.36
×
0.7
×
0.9
=
0.2268
δ
3
(
1
)
=
0.2268
×
0.3
×
0.5
=
0.03402
δ
3
(
2
)
=
0.2268
×
0.7
×
0.9
=
0.142884
\delta_1(1)=0.6×0.5=0.3 \\ \delta_1(2)=0.4×0.9=0.36\\ \delta_2(1)=0.36×0.3×0.5=0.054 \\ \delta_2(2)=0.36×0.7×0.9=0.2268\\ \delta_3(1)=0.2268×0.3×0.5=0.03402 \\ \delta_3(2)=0.2268×0.7×0.9=0.142884
δ1(1)=0.6×0.5=0.3δ1(2)=0.4×0.9=0.36δ2(1)=0.36×0.3×0.5=0.054δ2(2)=0.36×0.7×0.9=0.2268δ3(1)=0.2268×0.3×0.5=0.03402δ3(2)=0.2268×0.7×0.9=0.142884
可以看出,李建钢生气的概率一直维持在一个很低的水平!
由此得出结论,谈恋爱还是要学会哄人的。— —
小丁同学算不上什么渣男,也不是特别聪明,归根揭底,还是当时学习隐马尔可夫模型的时候没有学好,没有在一开始关注到李建钢的想法,并且后面一错再错,导致了最后的不欢而散。
第二天,小丁同学捧着煎饼果子去找李建钢,却发现自己联系不上李建钢了。在苦苦哀叹造化弄人的同时,也希望他能冷静下来,明白学好数学的重要性。
(狗头.jpg)