python Markov马尔科夫网络节点状态预测并筛选小样本

之前写的基于马尔科夫的小样本节点检测文章里的内容~~

马尔科夫决策过程是在随机过程的基础上提出来的,是对强化学习(RL)问题的数学描述。

马尔科夫性需要满足:现在将来过去条件独立:

定义:如果在t时刻的状态xt的条件分布F满足如下等式,那么这个状态被称为马尔科夫状态,或者说该状态满足马尔科夫性,该随机过程即是马尔科夫过程。(其中F是条件分布,t为时间,xn为在时间tn时刻的状态)

马尔科夫性条件分布表达式

如果这个马尔科夫过程满足:随机变量X(t)(t={t1,...,tn})和时间{t1,...,tn}都是离散的,则这个马尔科夫过程称作为马尔科夫链

马尔科夫链是概率论中用来描述动态的随机现象的数学模型。例如,我们将北京每天的最高气温看作{s1,s2,s3,...,st,...} ,这里面每个状态st都是随机的且是离散的。而这其中我们硬性假设s(t)只与它的前一个状态s(t-1)有关,即今天的最高气温只与昨天的最高气温有关,而与前天甚至以前的天气无关。这样的硬性假设虽然不适用于所有应用,但是对于一些问题可以很好地给出近似解~

马尔科夫过程中在tn时刻由前一状态i变成当前状态j时,我们将其称之为状态转移,记作Pij(n)。接下来要介绍的是状态转移矩阵。
定义:状态转移概率是指从一个马尔科夫状态s跳转到后继状态s'的概率。
如果状态序列x为{x1,x2,...,xn},即状态s可能的取值有n种,则状态转移矩阵为n x n矩阵为{P(x1x1),P(x1x2),...,P(x1,xn),...,P(xnxn)}:

状态转移概率矩阵

设L(i)为状态Xi出现的总次数;l(ij)^n表示在{t1,...,tn}时间序列中,由Xi转移到Xj的总次数,则状态转移概率为:


状态转移概率公式

则P(X=j)的概率为:


状态转移概率P(X=j)公式

即,状态转移矩阵的行向量。

然后对具体问题进行具体分析:
对于网络节点,我们现在拿到的数据如下图:


网络节点状态数据

这里网络节点是采用的轮询检测,然后横轴是每一次轮询检测的情况(分值为1-10,越高节点风险值越高),纵轴表示的是第几个节点。这里进行了20次轮询检测,然后我们要做的是预测第21次的情况(一步状态预测)。
这里的时间由于是每一次轮询,故而是离散的,但是这里的节点状态不是离散的,我们这里定义:网络节点只有三个状态:安全,正常和待检测,即状态序列{i, j, k},其中i:0-3.9,j:4.0-6.9,k:7.0-10.0。则每个节点的状态转移矩阵:

image.png

懒得码字了,就是这样

代码使用python进行实现,纯手打,基本没用库。
写的不是很完美但是注释很丰富,过程每一步都print了,就不再做代码的介绍了,代码传到我的GitHub上了:https://github.com/JerryLoveCoding/MarkovForecasting

你可能感兴趣的:(python Markov马尔科夫网络节点状态预测并筛选小样本)