马尔可夫转换场 python 实践

研究了一下将一维信号转成二维图像的方法,这里对马尔可夫转换场单独整理一下,方便以后查阅。

马尔可夫转移场(MTF)是一种突出时间序列行为的可视化技术。这里深入探讨了如何构建和解释这些领域。
然后,在马尔可夫转换场的基础上进一步探索网络图的解释。

import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
import sys

from matplotlib import gridspec
from numba import njit, prange
from pyts.image import MarkovTransitionField

import tsia.plot
import tsia.markov
import tsia.network_graph
%matplotlib inline
plt.style.use('Solarize_Light2')

数据概览

使用的数据全部采集自工业设备,时间跨度为一年,采集频率为一个小时。

加载数据

DATA = "/home/torch/LiangGuangjin/mtf-deep-dive-main/data/"
tag_df = pd.read_csv(os.path.join(DATA, 'signal-1.csv'))
tag_df['timestamp'] = pd.to_datetime(tag_df['timestamp'], format="%Y-%m-%d %H:%M:%S")
tag_df = tag_df.set_index('timestamp')

将数据以波形图的形式绘制

fig = plt.figure(figsize=(28,4))
plt.plot(tag_df, linewidth=0.5)
plt.show()

在这里插入图片描述

马尔可夫转换场(MTF)

MTF 概述

pyts 软件包包含一些开箱即用的时间序列成像功能,包括 MTF:通过这种转换,之前的信号可以用下面的矩阵来表示:

计算马尔可夫转换场

n_bins = 8
strategy = 'quantile'
X = tag_df.values.reshape(1, -1)
n_samples, n_timestamps = X.shape

mtf = MarkovTransitionField(image_size=0.01, n_bins=n_bins, strategy=strategy)
tag_mtf = mtf.fit_transform(X)

绘制马尔可夫转换场

fig = plt.figure(figsize=(5,4))
ax = fig.add_subplot(111)
_, mappable_image = tsia.plot.plot_markov_transition_field(mtf=tag_mtf[0], ax=ax, reversed_cmap=True)
plt.colorbar(mappable_image)

在这里插入图片描述

MTF 详细计算过程

下面我们将详细拆解一下MTF,以便深入理解MTF的特性从而进一步洞察时序数据。
我们将采用如下步骤:

  1. 将时序数据离散化
  2. 构建马尔可夫转换矩阵
  3. 估算转换概率
  4. 计算马尔可夫转换场
  5. 计算聚合的MTF
  6. 提取有意义的指标
  7. 将转换概率映射回初始信号

Step 1. 数据离散化

X_binned, bin_edges = tsia.markov.discretize(tag_df)

经此运算,时间序列的每个值 x [ i ] x[i] x[i] 都与刚刚计算出的一个分段 b i n bin bin (量化 q u a n t i l e quantile quantile)相关联。

看一下 X _ b i n n e d X\_binned X_binned 的内容:

unique, counts = np.unique(X_binned, return_counts=True)
print(np.asarray((unique, counts)).T)

> [[  0 552]
>  [  1 552]
>  [  2 552]
>  [  3 552]
>  [  4 552]
>  [  5 552]
>  [  6 552]
>  [  7 552]]

整个信号的长度为 4416 4416 4416,而 552 × 8 = 4416 552\times 8=4416 552×8=4416,这也就说明离散化就是将 X X X 分成了 Q Q Q 个分位数段。

看一下 b i n _ e d g e s bin\_edges bin_edges 的内容:

bin_edges

> [ 82.4318845 , 118.41579271, 137.42079667, 156.7783225 ,
>   166.35528917, 175.224915  , 183.85208333, 196.53184021,
>   255.378145  ]

第一个和最后一个bin edges分别对应信号的最低值和最高值。中间的bin edges由离散器计算。对于之前加载的信号,量化过程会将该信号的不同取值分入以下bins:

Bin Start End
0 < 82.4 82.4
1 82.4 118.4
2 118.4 137.4
3 137.4 156.8
4 156.8 166.4
5 166.4 175.2
6 175.2 183.9
7 183.9 196.5
8 196.5 255.3
9 255.3 > 255.3

在时间序列上绘制这些分段,以直观地了解数值是如何离散的:

tsia.plot.plot_timeseries_quantiles(tag_df, bin_edges, label='signal-1')
plt.legend()

在这里插入图片描述

Step 2. 建立马尔可夫转换矩阵

X_mtm = tsia.markov.markov_transition_matrix(X_binned)

> array([[465,  86,   1,   0,   0,   0,   0,   0],
>        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值