原始人学人工智能——从加减乘除开始手算马尔可夫链
就像正在阅读本文的你,你是几十年经验的积累,在这之前,又是上万年进化的积淀,你的每一个行为和语句背后可能都是无数知识原点的连接,但你永远无法去探究出具体是什么塑造了现在的你。比如说我们前10天有9次转换,其中有2次是晴-晴,1次晴-阴,1次阴-雨,1次雨-雨,1次雨-晴,1次晴-雨,1次雨-阴,1次阴-晴。跟一开始的数据一样60%的概率晴天,30%的概率阴天还有10%的概率是下雨天。今天的天气是晴
原始人学人工智能——从加减乘除开始手算马尔可夫链
原创 闫啸 叽里呱啦的啸宝 2025年05月17日 22:06 辽宁

前言:在学习机器学习或者人工智能的时候,翻阅了很多书和教材,可能是受限于我的知识水平和学习方法。经常出现听懂了不会用,或者会用了不知道咋回事的情况。所以在这里我会试着用最笨的办法——手算,完全从最基础的东西开始,在一个人只会加减乘除的情况下,教会他(也是我自己)人工智能(机器学习)的一些重要算法和概念。
往期:
![]()
明天是什么天气呢?在果园里的你望着天上的太阳,如果还是大太阳的话我就需要给这些果树浇浇水,但如果是下雨天的话就可以在家睡大觉休息了。
那么该怎么知道明天什么天气呢?查一下天气预报?别忘了你可是个原始人!更不用说分析云和气象数据了。但是通过前面的课程的学习,你的脑中觉醒了一个模糊的认识:每天的天气变化之间有联系吗?我能否通过记录天气数据来实现预测天气呢?

在数据分析中,有两种基本的思路,一种是觉得自己的因素和特征没找全,所以需要不断地寻找新的特征。一种是觉得,规则和条件都蕴含在现有数据中,只要选择合适的方法,自然能导致正确的结果。两种思路各有利弊,也引导出了一系列不同的数据分析方法。
而在自然中,唯一没有发生改变的事情就是所有事情都在不断发生着改变。要想把握这种变化可不是一件简单的事情,特别是当事情连续发生着变化时。我们需要捋出好长的时间线,需要捋出这条时间线上对这个结果可能产生影响的那些因素,所以按照思路一去找寻所有的线索就太复杂了。
所以何不干脆直接把问题简化,把注意力放在最终的结果上呢?因为现在的状态是之前所有因素综合发挥作用导致的结果,那是不是就说明,先前的所有因素都以一些特定的方式蕴含在了当前的结果里呢?那是不是就说明,当前的这个结果其实可以作为一个绝佳地预测接下来变化的样本呢?就像正在阅读本文的你,你是几十年经验的积累,在这之前,又是上万年进化的积淀,你的每一个行为和语句背后可能都是无数知识原点的连接,但你永远无法去探究出具体是什么塑造了现在的你。
恭喜你,如果你也曾产生过这样的想法!那么接下来我将很荣幸地向你介绍,马尔可夫链。
马尔可夫链的分析逻辑,就是把复杂问题简化。不在过度分析和挖掘过去上浪费精力,而是关注于当下和未来。
概念
对于数据的分析和后续预测仅基于当前状态,与过去经验无关。比如说吃饭,无论你是吃面条吃饱了还是吃米饭吃饱了,都会导致你接下来停止吃饭。(当然如果实在是太好吃了就另说(〃'▽'〃))
优缺点
优点:简单,易于理解,较为省事。在一些说法里会提到它的这些优点来源于无记忆性,我很不喜欢这种说法。搞得好像马尔可夫链是一种想当然的简化。但是它不是不在乎先前的过程和经验,而是认为现有的状态是无数先前特征共同作用达到的结果,其过去蕴含于现在,其未来也基于现在。
缺点:现实生活中,当前状态可能会伴随着大量随机性和被操控性。随机会导致你的预测效果不佳,而后者则可能会把你引入一个圈套。比如说赌博,赌徒会基于前面几局的获利预测未来,却忽视了这个当前状态可能只是长期人为设计过程中的一环。
回到我们的天气预测的问题上来,假设你已经记录了很长一段时间的天气情况了,下面就可以利用马尔可夫链进行分析啦。
你记录的天气数据应该类似于下面的样式:

马尔可夫链里的一个关键概念叫做转移概率,也就是从当前状态转变为别的状态的概率。比如说我们这里的天气预测,假设有三种天气:晴天,阴天和下雨天。假设今天是晴天的话,那么明天的天气就有三种变化情况,分别对应着:

那么你在进行统计你所记录的天气的时候,就不能简单地去计算每个天气所占的比例了,而是应该计算每个天气第二天变成别的天气的比例。(当然,我们后面会发现这两者之间存在着重要的联系)

比如说我们前10天有9次转换,其中有2次是晴-晴,1次晴-阴,1次阴-雨,1次雨-雨,1次雨-晴,1次晴-雨,1次雨-阴,1次阴-晴。那么你计算得到的就是如下的比例分布,专有名词叫做转移矩阵。

当你统计完这些数据了之后,我们就得到了前十天每个天气变成别的天气的概率了。假设你通过长时间耐心的坚持已经统计出了足够多的数据,并且通过统计分析后,得到了如下的矩阵分布:

今天的天气是晴天,那么我们就得到了今天天气的行式(1,0,0)(因为今天已经确定是晴天了,所以剩下两个天气的概率就是0)。
然后拿这个行式去乘以上面的转移矩阵就得到了明天的天气概率。跟一开始的数据一样60%的概率晴天,30%的概率阴天还有10%的概率是下雨天。

当然,你可以说这样不是挺简单的嘛,我不用乘都知道。是的,关键是马尔可夫链还可以帮你很容易地计算出后天的天气概率。
这时你只用拿明天的天气概率乘以转移矩阵即可。同样,你甚至可以计算出未来无限期的天气概率。(正好复习一下矩阵乘法)

当然,你的预测大概率还不如部落祭司的唱唱跳跳(所以别急着炫耀(˘•灬•˘))。但是在数据里挖掘信息,建立连接的思想已经在你的脑海里扎下了根,不是吗?你望着天空,思考着明天的天气会不会符合自己的预测,望着望着......直到超过了某个高等文明设定的阈值......
彩蛋
如果你有足够的耐心,往后计算的时间越来越长,你会发现预测出的天气概率会逐渐趋于稳定。这时,如果你反过头去计算一下你记录的数据里三种天气所占的比例,没准能有独特的发现哦。这是为什么呢?
更多推荐


所有评论(0)