上课时突然想到一个非常有趣的故事
如果能帮到你,我会非常的开心
这里只写了一个decoding方法 ,其他方法都可以用这个故事转化
如果有错漏 欢迎指正
故事开始
想象你领居家有个小孩,他非常顽皮。你是刚搬到这里的,你不怎么了解小孩,也不怎么了解这家邻居。
这天你下班听见隔壁的小孩在哭喊“我再也不敢了,555555555”,你的家人说隔壁的大哥又打他们家小孩了,这都连着打了第三天了。这个时候你会不会好奇小孩是因为什么被打的。
现在开始分析,首先观察转态序列为 [挨打,挨打,挨打] 这就是隐式马尔科夫中的观察序列的
O
1
,
O
2
,
O
3
O_{1},O_{2},O_{3}
O1,O2,O3
那么我们现在推断这个小孩这三天有没有干坏事 因为我们忙着上班所以当然不知道小孩这三天有没有干坏事了,这里先用
S
1
,
S
2
,
S
3
S_{1},S_{2},S_{3}
S1,S2,S3来表示。
如果小孩的父亲是个非常好的人,小孩不干坏事就不会打他,那么我们可以将这个信息用一个表存起来 记作矩阵B
B | 打 | 没打 |
---|---|---|
干坏事 | 100% | 0% |
没干坏事 | 0 | 100% |
这个时候很容易推断这几天小孩干没干坏事对吧, S 1 , S 2 , S 3 S_{1},S_{2},S_{3} S1,S2,S3=干坏事,干坏事,干坏事 也就是我们100%确定这小孩每天都干坏事了。
但是真实情况往往并不是这样的,他的父亲也可能是个酒鬼,那么这个表格就变成了这样
B | 打 | 没打 |
---|---|---|
干坏事 | 100% | 0% |
没干坏事 | 50% | 50% |
也就是说他干坏事了他的父亲一定打他,没干坏事时有可能打他也可能不打他
这个情况下我们就不能100%肯定小孩这三天有没有干坏事了
假设情况1
小孩三天的坏事记录为 否否否
这种情况的概率很好算 0.5 * 0.5 * 0.5 = 0.125 = 12.5%
也就是第一天没干坏事挨打的概率,乘以第二天没干坏事挨打的概率乘以第三天的
假设情况2
小孩三天的坏事记录为 是否否
概率为 1 * 0.5 * 0.5 = 0.25 = 25%
假设情况略
······
那么我们只要算出所有情况的概率,最高概率的假设就是我们的推测值。
我们这里只考虑了,父亲的情况,却没有考虑小孩,如果我们了解小孩是否聪明,例如聪明的小孩在干完坏事时会短暂的做个乖孩子 即今天做坏事后,明天接着做坏事的概率很低。有了更多的信息我们就能做出更好更准确的判断了
我们将小孩干坏事后是否会接着干存在一个表格里 对应一个矩阵A
A | 干坏事 | 没干坏事 |
---|---|---|
干坏事 | 30% | 70% |
没干坏事 | 50 | 50% |
矩阵A的第一行代表了前一天干坏事时,后一天接着干坏事的概率为30%,后一天不干坏事的概率为70%(这娃还不算太傻)
第二行代表他前一天没干坏事时,后一天做不做坏事的概率都是50%
再引入一个关于小孩的信息 π 代表了随机某一天一天小孩干坏事的概率是多少
假设小孩很调皮,那么他对应的π为
π
干坏事
=
0.7
,
π
不干坏事
=
0.3
π_{干坏事}=0.7 ,π_{不干坏事}=0.3
π干坏事=0.7,π不干坏事=0.3
这个时候我们有的信息就非常多了,我们可以更准确的判断小孩三天有没有干坏事了
B | 打 | 没打 |
---|---|---|
干坏事 | 100% | 0% |
没干坏事 | 50% | 50% |
需要的信息汇总一下
小孩是否乖巧π (随机某天小孩干坏事的概率)
小孩是否聪明的矩阵A(小孩干坏事后会不会当乖小孩)
小孩的父亲是否是个好爸爸的矩阵B(小孩干坏事和不干坏事时是否动粗的概率)
以及我们已经知道的小孩挨了三天打的观察序列O [挨打,挨打,挨打]
跟上面的流程一样
假设情况1
小孩三天的坏事记录为 否否否
首先第一天没干坏事 对应于π中的概率
π
不干坏事
=
0.3
π_{不干坏事}=0.3
π不干坏事=0.3
然后要乘以他第一天没干坏事时,他爸打他的概率0.5,所以他第一天没干坏事还挨打的概率为0.5 * 0.3 = 0.15 = 15%
第二天小孩没干坏事的概率对应于A中的
A
2
,
2
=
0.5
A_{2,2} = 0.5
A2,2=0.5,他没干坏事爸爸打他的概率0.5
所以第二天没干坏事挨打的概率为0.5 * 0.5 = 0.25 = 25%
第三天同理为0.25
将三个概率累乘就得到了假设1的概率为 0.15 * 0.25 * 0.25 = 0.009375 = 0.93%
可以看出虽然他爸爸不是那么好,但连续三天冤枉坏小孩的概率都不到百分之一
假设情况2
这次我们换个更复杂的
小孩三天的坏事记录为 是否是
首先第一天干坏事 对应于π中的概率
π
干坏事
=
0.7
π_{干坏事}=0.7
π干坏事=0.7 再乘以该坏事父亲打的概率100%
第一天的概率0.7
第二天没干坏事 对应于A中的
A
1
,
2
=
0.7
A_{1,2} = 0.7
A1,2=0.7 再乘以没干坏事被父亲打的概率50%
第二天的概率0.35
第三天干坏事 对应A中的
A
1
,
2
=
0.5
A_{1,2} = 0.5
A1,2=0.5 再乘以干坏事被父亲打的概率100%
第三天的概率0.5
假设情况2 出现的可能性为 0.7 * 0.35 * 0.5 = 0.1225 = 12.25%
假设情况略
···············
所以我们可以算出每一种假设的概率,找出最高的那一个就是我们的推测结果
而这个完整的推测过程就是马尔科夫链的decoding过程
这个故事中有几个点需要注意
1.现实生活中的问题,ABπ这三个概率很可能并不独立,即父亲的好坏很可能决定这小孩干坏事的概率,也跟小孩是否连续犯错有关,又或者有的小孩会非常叛逆,挨打后会更可能犯错,而我们作为外人对他们进行观察时,是无法知道这之中的微妙关系的。所以更好的办法是不要去关心更多的细枝末节,而是通过能获得的数据做出推断。
2.你都学这么深奥的知识了,要是还是只能用武力屈服小孩,那你也就太low了,别学了。