时序分析 48 -- 时序数据转为空间数据 (七) 马尔可夫转换场 python 实践(下)

news2025/7/18 8:23:08

时序分析 48 – 时序数据转为空间数据 (七)

马尔可夫转换场 python 实践(下)

… 接上

从MTF到图模型

从MTF中我们可以生成图 𝐺 = ( 𝑉 , 𝐸 ) 𝐺=(𝑉,𝐸) G=(V,E) ,节点V和时间 𝑖 是一一对应的关系。我们有两种思路来对这里面的信息进行编码,

  • Flow Encoding: 流动编码帮助我们观察大的信息流在什么地方出现。我们把时间流映射为图中的节点,使用颜色梯度来表示时间序列中的每个节点,而图中的边是由MTF中的权重决定的。
  • Modularity Encoding: 模块度是图分析中一种非常重要的模式,它被经常用来定位图中的一些局部特殊结构,是常用的一种社区发现算法。这里我们把模块标签分配给每一个节点,并且给予特定的颜色,节点的大小代表聚类系数,边的颜色是其目标节点的模块标签。

简单回顾一下模块度概念:

Q = Σ c [ Σ i n 2 m − ( Σ t o t 2 m ) 2 ] Q=\Sigma_c[\frac{\Sigma_{in}}{2m}-(\frac{\Sigma_{tot}}{2m})^2] Q=Σc[2mΣin(2mΣtot)2]
其实图计算中的模块划分或者说社区发现算法类似于非监督学习中的聚类算法,主要是寻找一种模块划分方案是的模块内部的节点连接比较紧密而模块之间的连接比较松散。上面的公式中的 Q Q Q 是评估模块划分是否最优的优化目标(使 Q Q Q 最大)。 Q Q Q 的含义是加总每个模块的内部聚合度评估减去其与外部连接强度的评估的值。

下面我们将分解建立图分析的步骤,以求更好地理解其特性同时更好的洞察时序数据中所蕴涵的信息。总共分位四步:

  • 构建MTF并从其产生图
  • 计算图分区和模块并将其编码用来表示图
  • 画出图
  • 将分区或者模块映射回原始的时序

第一步:构建图

我们从MTF中构建图并画出这个原始图。

G = tsia.network_graph.get_network_graph(tag_mtf[0])
tsia.plot.plot_network_graph(G, title="Network graph")

在这里插入图片描述

第二步:计算分区和模块用来表示图

上面的图并没有给我们带来多少信息,我们将采用模块划分算法得到其最佳划分并对图进行编码。

encoding = tsia.network_graph.get_modularity_encoding(G)

同时,计算一些统计量。

stats = tsia.network_graph.compute_network_graph_statistics(G)
stats

{
    'Diameter': 1,
    'Average degree': 48.0,
    'Average weighted degree': 46.273244774344036,
    'Density': 1.0425531914893618,
    'Average path length': 0.00650027056715701,
    'Average clustering coefficient': 0.10427714321139174,
    'Modularity': 0.3747117973757859,
    'Partitions': 4
}

{‘Diameter’: 1,
‘Average degree’: 48.0,
‘Average weighted degree’: 46.273244774344036,
‘Density’: 1.0425531914893618,
‘Average path length’: 0.00650027056715701,
‘Average clustering coefficient’: 0.10427714321139174,
‘Modularity’: 0.3747117973757859,
‘Partitions’: 4}

第三步. 画出这个新图

nb_partitions = stats['Partitions']
modularity = stats['Modularity']
title = rf'Partitions: $\bf{nb_partitions}$ - Modularity: $\bf{modularity:.3f}$'
_ = tsia.plot.plot_network_graph(G, title=title, encoding=encoding)

在这里插入图片描述
社区发现算法在这个信号中抽象出了四个模块或者分区。但我们还不清楚这个新信息对我们有什么用。

第四步. 将分区颜色映射回原来的时序

ng_map = tsia.network_graph.get_network_graph_map(tag_df, encoding, reversed_cmap=True)
_ = tsia.plot.plot_colored_timeseries(tag_df, ng_map)

在这里插入图片描述
图中所发现的分区在原始时序中都有对应的子序列,并且该子序列具备相对显著的特点,在时序分析中称为 shapelet。

下面画出了其他信号的类似表示:

def plot_communities_timeseries(tag, image_size=48, colormap='jet'):
    # Loads the signal from disk:
    tag_df = pd.read_csv(f'{tag}.csv')
    tag_df['timestamp'] = pd.to_datetime(tag_df['timestamp'], format='%Y-%m-%dT%H:%M:%S.%f')
    tag_df = tag_df.set_index('timestamp')
    
    X = tag_df.values.reshape(1, -1)
    mtf = MarkovTransitionField(image_size=image_size, n_bins=n_bins, strategy=strategy)
    tag_mtf = mtf.fit_transform(X)
    
    G = tsia.network_graph.get_network_graph(tag_mtf[0])
    statistics = tsia.network_graph.compute_network_graph_statistics(G)
    nb_partitions = statistics['Partitions']
    modularity = statistics['Modularity']
    encoding = tsia.network_graph.get_modularity_encoding(G, reversed_cmap=True)
    ng_map = tsia.network_graph.get_network_graph_map(tag_df, encoding, reversed_cmap=True)
    
    fig = plt.figure(figsize=(28, 4))
    gs = gridspec.GridSpec(1, 2, width_ratios=[1,4])

    ax = fig.add_subplot(gs[0])
    title = rf'Partitions: $\bf{nb_partitions}$ - Modularity: $\bf{modularity:.3f}$'
    tsia.plot.plot_network_graph(G, ax=ax, title=title, reversed_cmap=True, encoding=encoding)
    
    ax = fig.add_subplot(gs[1])
    tsia.plot.plot_colored_timeseries(tag_df, ng_map, ax=ax)
    
    return statistics
signals = [f'signal-{i}' for i in range(1,7)]

stats = []
for signal in signals:
    s = plot_communities_timeseries(signal)
    s.update({'Signal': signal})
    stats.append(s)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

stats = pd.DataFrame(stats)
stats.set_index('Signal')

在这里插入图片描述
似乎我们很难从中解读出多少有价值的信息。

总结一下

将MTF转换概率映射到其原始时序信号是一个可以考虑的工具,它可以帮助我们进一步理解该时序数据。对比之下,把图分析中的社区映射到原始时序似乎并没有为我们到来多少价值,然而从图计算中提取出来的特征可以用来作为一个神经网络的输入。

MTF和其相应的图模型可能可以用来

  • 比较训练和验证数据集的一致性,看是否存在概念漂移。
  • 训练半监督的异常预测模型:在时序数据上训练一个时序CNN模型,可每隔一段时间(例如每分钟)执行内联的MTF计算,把推理结果和已训练的模型进行比较,观察时序信号是否存在行为改变。
  • 进一步解释了非监督时序模型的意义和作用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis从理论到实战:使用Redis实现商铺查询缓存(逐步分析缓存更新策略)

文章目录一、什么是缓存二、缓存的作用三、添加商户缓存四、分析缓存更新策略1、删除缓存还是更新缓存?2、如何保证缓存与数据库的操作同时成功或失败?3、先操作缓存还是先操作数据库?加油加油,不要过度焦虑(#^.^#) 一、什么是缓存…

ThreadLocal为什么会出现内存泄漏,你真的知道吗?

目录 1 前言 2 ThreadLocal进行线程隔离的小示例 3 原因 1 前言 大家想要搞清楚这个问题,就必须知道内存泄漏和内存溢出的区别 内存泄漏:不就被使用的对象或者变量无法被回收 内存溢出:没有剩余的空间来创建新的对象 2 ThreadLocal进行…

Java中的字符串

🙉 作者简介: 全栈领域新星创作者 ;天天被业务折腾得死去活来的同时依然保有对各项技术热忱的追求,把分享变成一种习惯,再小的帆也能远航。 🏡 个人主页:xiezhr的个人主页 java中的字符串一、简…

C++:重定义:符号重定义:变量重定义

概述:在上一篇我们知道 通过 #ifndef....#defin....#endif , 这个解决头文件重复包含的问题 C:重定义:class类型重定义_hongwen_yul的博客-CSDN博客 避免头文件的重复包含可以有效的避免变量的重复定义,其实不光变量…

[附源码]java毕业设计基于web旅游网站的设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

使用Docker开发GO应用程序

根据Stack Overflow的2022开发者调查,Go(或Golang)是最受欢迎和最受欢迎的编程语言之一。由于与许多其他语言相比,Go的二进制大小更小,开发人员经常使用Go进行容器化应用程序开发。 Mohammad Quanit在他的社区全能课程…

小程序vant-tabbar使用示例,及报错处理

小程序vant-tabbar使用示例,及报错处理1. 配置信息2. 添加 tabBar 代码文件3. 编写 tabBar 代码custom-tab-bar/index.tscustom-tab-bar/index.jsoncustom-tab-bar/index.wxml使小程序使用vant-tabbar组件时,遇到以下报错:Couldn’t found th…

Java基于springboot+vue的儿童玩具销售购物网站 多商家

爱玩儿是所有孩子的天性。尤其是在婴幼儿阶段。选择一个好的玩具,不仅能够让孩子玩儿的开心,而且有助于孩子智力的开发。很多家长在选择玩具的时候,不知道选择什么样的玩具。且当前玩具市场的玩具鱼目混杂,种类繁多,而…

SAR信号处理基础1——线性调频信号

关键字:线性调频信号,LFM信号,chirp信号,驻定相位原理(POSP),泰勒展开,Taylor展开,脉冲压缩,匹配滤波,sinc,分辨率,峰值旁…

QProgressDialog.close()失败,进度条关闭感觉失败了,无法彻底关闭

开发环境:我是在deepin(深度)系统下开发的,在我本机上,一点问题也没有,但是我移植到了ubantu的机子上,就偶尔出现出个问题,出现了一个模态框,需要重启软件才能关闭。 问题…

Vue的computed和watch的区别是什么?

一、computed介绍 computed 用来监控自己定义的变量&#xff0c;该变量在 data 内没有声明&#xff0c;直接在 computed 里面定义&#xff0c;页面上可直接使用。 //基础使用 {{msg}} <input v-model"name" /> //计算属性 computed:{msg:function(){return …

【MySQL】MySQL日志系统以及InnoDB背后的技术(MySQL专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

Java基于springboot+vue的个人博客网站 前后端分离

随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多网站的之中&#xff0c;随之就产生了“博客网站”&#xff0c;这样就让博客网站更加方便简单。 对于本博客网站的设计来说&#xff0c;系统开发主要是采用java语言技…

2022国产8K摄像机介绍

摄像机是一种把光学图像信号转变为电信号&#xff0c;以便于存储或者传输的设备。当我们拍摄一个物体时&#xff0c;此物体上反射的光被摄像机镜头收集&#xff0c;使其聚焦在摄像器件的受光面&#xff08;例如摄像管的靶面&#xff09;上&#xff0c;再通过摄像器件把光转变为…

N-HiTS: Neural Hierarchical Interpolation for Time Series Forecasting

N-HiTS: Neural Hierarchical Interpolation for Time Series Forecasting 神经预测的最新进展加速了大规模预测系统性能的提高。然而,长期预测仍然是一项非常困难的任务。影响这项任务的两个常见挑战是预测的波动性和它们的计算复杂性。本文提出N-HiTS,一种通过结合新的分层…

不同字符编码对比

目录 1. ASCII码 2. Unicode 3. GBK编码 1. ASCII码 ASCII码使用一个字节编码&#xff0c;但只适用于英文&#xff1b; 2. Unicode Unicode定义了字符集&#xff0c;有 17 个 code plane&#xff0c;总共规划了 1,114,112 个 code point。而这些字符可以使用UTF-8、UTF-1…

Windows无法访问指定设备、路径或文件怎么办?

如何解决Windows 无法访问指定的设备、路径或文件错误&#xff1f; 1.修改安全中心的设置 如果在安装程序的过程中&#xff0c;遇到该错误&#xff0c;可以进入到【Windows安全中心】进行设置修改。 第一步&#xff1a;点击左下角的开始按钮&#xff0c;然后依次点击【设置】…

直接安装WSL2及安装Ubuntu到F盘

1. 勾选这三项&#xff0c;重启 2. 以管理员方式运行powersell wsl --updatewsl --shutdownwsl --set-default-version 2wsl --status3. 解压缩ubuntu 解压缩Ubuntu_1804.2019.522.0_x64.appx到F盘 4. 安装ubuntu 双击ubuntu1804.exe安装 5. 运行 双击ubuntu1804.exe …

AI人工智能实践技术系统性教学方案

郁磊老师【副教授】 &#xff1a;长期从事Python、Matlab机器学习及深度学习等研究工作&#xff0c;具备良好的数学及信号处理基础&#xff0c;熟悉如神经网络、支持向量机、决策树、随机森林等&#xff0c;以及群优 化算法&#xff0c;如遗传算法、蚁群算法、蝙蝠算法等&#…

React源码解读之更新的创建

React 的鲜活生命起源于 ReactDOM.render &#xff0c;这个过程会为它的一生储备好很多必需品&#xff0c;我们顺着这个线索&#xff0c;一探婴儿般 React 应用诞生之初的悦然。 更新创建的操作我们总结为以下两种场景 ReactDOM.rendersetStateforceUpdate ReactDom.render …