图神经网络丨GCN 基础理论 & 系列学习教程
对于图卷积网络 GCN 的研究已经有一段时间了,在实习阶段应用较多且符合自己在校的复杂网络研究方向,但一直没有时间对其进行总结和梳理。因此,在这毕业前利用这漫长的假期对图卷积网络进行再一次回顾,来加深自己的理解并解答自己理论的问题!对于仍存在的疑惑待以后实践中解决! 经典图镇场~ 图卷积网络入门系列 GCN 涉及的理论较多所以文章篇幅较长,本系列将其分为三部曲: 图卷积网络 GCN(一)研究背景和空域图卷积 图卷积网络 GCN(二)图上的傅里叶变换和逆变换 图卷积网络 GCN(三)详解三代图卷积网络理论 基于频谱域与基于空间域的图卷积网络对比 图神经网络 GNN 基准数据集汇总 这三部分内容涉及到的理论知识能大概了解图卷积网络的前世今生,如有疑问待以后慢慢改进! 当然这理论知识并不能让学者体会到图卷积 GCN 的强大及其在工业界中的应用,下面介绍个人所了解的学习资料来深入学习! 学习资料 理论篇 如何理解 Graph Convolutional Network(GCN)?:知乎上关于 GNN 比较热的讨论话题 深度学习时代的图模型,清华发文综述图网络:一篇综述性质的文章 thu ...
时间序列丨基础概念理论 & 异常检测算法 & 相关学习资源 & 公开数据集
背景 时间序列 (time series,TS) 是一组按照时间发生先后顺序进行排列的数据点序列。通常一组时间序列的时间间隔为一恒定值(如 1s,1min,1h,1d),因此时间序列亦可作为离散时间数据进行分析处理。 时间序列异常检测(TS anomaly detection)的主要目标是从时间序列中识别异常的事件或行为,异常检测算法目前广泛应用于众多领域中,例如量化交易,网络入侵检测,智能运维等。 与之相关的研究领域: 时间序列预测(TS Forcasting):目前有众多基于预测思想的时间序列异常检测算法,主要可以产生序列的基带。 离群点检测 (Outlier detection) :算法模型同样适用于时间序列异常检测。 这篇文章主要是总结当前「单变量时间序列」异常检测基础概念 & 算法逻辑,单指标时间序列在工业界应用场景较多而且较为成熟。 至于复杂的「多变量时序异常检测」(Multivariate TS Anomaly Detection) 附上笔者了解的前沿模型。 时序类型 在实际场景中,不同的业务通常会对应不同类型的时间序列模式,一般可以划分为几种类型:趋 ...
基于机器学习和深度学习的图数据异常检测综述
背景 图 (Graph) 普遍用于建模结构/关系性数据,节点 (vertices/nodes) 表示实体,边 (edges) 表示实体间存在的关系。 异常检测(Anomaly detection)指从数据中挖掘出与大部分对象不同的目标对象(异常点/离群点),这些目标对象的分布和产生机制与其它对象不同。 图异常检测(Graph anomaly detection)问题是指: Object-level:在单个图中识别出异常的图对象,例如异常节点、异常边或者异常子图(node/edge/sug-graph-level anomalies); Graph-level:在图集合/图序列中识别出异常图; 传统异常检测方法和图异常检测方法的区别如下图所示,传统方法不能高效地用于大规模图学习任务并且难以捕获对象节点间的关系,因此基于深度学习的图异常检测方法逐渐兴起,尤其是图神经网络 GNN 的热潮。 但基于深度学习的图异常检测方法存在非常多的局限性: 如何设计异常感知的模型目标函数,可以在模型训练过程中区分异常对象? 如何解释模型检测到的异常,尤其在于金融等传统行业? 如何提高模型的的 ...
智能运维 AIOps 系列丨调用链根因定位算法综述
本文主要总结下智能运维领域 AIOps 中一关键问题 调用链根因定位 及其前沿的学术界解决方法,随最新论文发表和空闲时间而持续更新 ~ 附上个人总结的调用链定位最新研究论文汇总链接:https://github.com/dreamhomes/RCAPapers 个人论文解读笔记汇总: SIGMETRICS 2012 丨 MonitorRank:微服务架构中的根因定位方法 CLOUD 2019 丨基于多模态深度学习方法调用链异常检测方法 WWW 2020 丨 AutoMAP:微服务应用自动故障诊断框架 NOMS 2020 丨 MicroRCA:微服务中性能故障根因定位方法 ISSRE 2020 丨 TraceAnomaly:基于深度贝叶斯网络的微服务调用链异常检测模型 TDSC 2020 丨 LCS-VMM:基于变阶马尔可夫模型和最长公共子串的调用链故障模式挖掘方法 ICSE 2021 丨 MicroHECL:大规模微服务系统中的高效根因定位方法 ICSE 2021 丨 MicroDiag:微服务系统下的细粒度应用性能诊断系统 WWW 2021 丨 MicroRank:微服务环境下基 ...
Chart Studio & Datapane:优雅地将 Plotly 图嵌入到 Markdown 文件中进行可视化分析
背景 在之前的一篇文章 工具篇 | Hexo Markdown 中嵌入 Plotly 动态交互图 中想要在 Hexo/Markdown 中嵌入 Plotly 图表,主要思路是:将 Plotly html 格式数据手动拿出来放在 Markdown 中进行渲染。思路非常简单所以没有详细介绍,但是这种手动流程太次,初始数据中包含所有的图表数据和图的格式,因此不仅文件大而且手动非常麻烦。 Plotly Chart Studio Plotly 官方直接推出 Chart Studio 服务和功能,可以直接在线绘制和保存 Plotly 图表。此外可以通过 Python API 绘制图表并上传到云存储中,然后在线访问或者 iFrame 分享嵌入等,可以直接在 Web 端嵌入。👍🏻 给定一个示例如下 这样插入图片比较简单,图表的数据和样式直接保存在 Plotly 云存储中!详细教程可以参考官方说明:Plotly Chart Studio。 存在的缺点就是嵌入样式比较简单,而且 Community 客户创建的 Public graph 有限制无法无限使用,对于需求不高的用户可以使用! Datapa ...
ICSE 2022丨DeepTraLog:GNN 和 Trace-Log 数据相结合的微服务异常检测方法
论文标题丨Trace-Log Combined Microservice Anomaly Detection through Graph-based Deep Learning 论文来源丨ICSE 2022 论文链接丨https://cspengxin.github.io/publications/icse22-DeepTraLog.pdf 源码链接丨暂未开源 TL;DR 目前微服务系统中的 Trace 和 Log 异常检测方法不能捕获到 Trace 和 Log 间复杂的层次调用和交互特征,因此这篇文章中结合 Log 和 Trace 数据提出了一种基于 GNN 深度学习方法 DeepTraLog,可以把 Trace 间复杂的调用结构和服务的日志时间统一建模到图结构中,然后用 Deep SVDD 模型进行异常检测。实验部分证明 DeepTraLog 相比于其它 baselines 在基准服务中可以达到较高的 precision (0.93) 和 recall (0.97)。 Algorithm/Model 模型的整体架构如下所示 主要想法:对于每个 Trace,span 作为节点,每 ...
齐夫定律 (Zipf' law) 理论及其应用场景
背景 齐夫定律(Zipf’s law,/ˈzɪf/)是由哈佛大学的语言学家乔治·金斯利·齐夫于 1949 年发表的实验定律。它可以表述为:在自然语言的语料库里,一个单词出现的频率与它在频率表里的排名成反比。[1] 所以,频率最高的单词出现的频率大约是出现频率第二位的单词的 2 倍,而出现频率第二位的单词则是出现频率第四位的单词的 2 倍,这个定律被作为任何与幂定律概率分布有关的事物的参考。类似 80/20 原则,即 20% 的内容会占有 80% 的访问量 f(k;s,N)=Cksf(k;s, N)=\frac{C}{k^{s}} f(k;s,N)=ksC 经过对数变换即可得到 log f=log C−s log klog~ f = log ~C - s~log~k log f=log C−s log k 因此齐夫定律很容易用点阵图观察,坐标分别为排名和频率的对数(log),比如在布朗语料库中 “the” 用上述表述可以描述为 x=log(1),y=log(69971)x = log(1), y = log(69971)x=log(1),y=log(69971)的点。如果所有的点接近一 ...
大规模图可视化分析框架 Graphistry
背景 PyGraphistry 是一个 Python 可视化图形 AI 库,用于提取、转换、分析和可视化大图形,特别是与 Graphistry 端到端 GPU 服务器会话一起使用。 图形学被用于解决诸如设备和用户行为的视觉映射、调查欺诈、分析机器学习结果以及从图形 AI 开始等问题。它提供了时间条、搜索、过滤、集群、着色、共享等指向和点击功能。Graphistry 是为大型图表构建的唯一工具。客户端定制的 WebGL 渲染引擎一次可以渲染 8MM 节点+边缘,而大多数老客户端图形处理器可以平滑地支持 100K 到 2MM 的元素。服务器端 GPU 分析引擎支持更大的图形。它平滑了 PyData 生态系统中的图形工作流,包括 Pandas/Spark/Dask 数据帧,Nvidia RAPIDS GPU 数据帧和 GPU 图形,DGL/PyTorch 图形神经网络,以及各种数据连接器。 官方文档参考 https://github.com/graphistry/pygraphistry https://github.com/graphistry/pygraphistry/blob/mas ...
图数据上的离群点检测开源库 PyGod
背景 现实世界中很多关系数据都可以建模成图/网络结构,在图上检测异常活动是一个非常重要的机器学习任务分支,尤其在社交网络和系统安全领域。 之前学习时尝试过多种图异常检测模型,但未有统一的模型框架和图数据处理格式,所以使用起来比较麻烦。现在 Github 上开源了一个大型的图数据异常检测仓库——PyGOD (Python Graph Outlier Detection); PyGod PyGOD 包括 10 多种最新的基于图的检测算法,如 DOMINANT 和 GUIDE。为了一致性和可访问性,PyGOD 是在 PyTorch geometry (PyG) 和 PyTorch 之上开发的,并遵循 PyOD 的 API 设计,主要特性如下: 统一的 API,详细的文档,以及各种基于图形的算法的交互式示例。 全面覆盖 10 多个最新图形离群点检测器。 完全支持多个级别的检测,如节点、边缘和图级任务 (WIP)。 使用 PyG 简化数据处理——与 PyG 数据对象完全兼容。 下面通过官方的 5 行代码中可以看到用 PyGOD 检测异常值的示例: 1234567891011# train a ...
IntelliJ IDEA/Pycharm 破解激活方式推荐
背景 最近 IDEA 经常弹出激活失败的情况,为了接着薅羊毛,因此再次找到一种简单的激活方法!🐶 ja-netfilter 代理 参考链接: https://github.com/ja-netfilter/ja-netfilter https://jetbra.in/52c2a991-6278-42fa-8e91-aaa649bbdb7b.html 首先需要在以上任一链接中下载 ja-netfilter 文件,解压后对应的目录结构如下: 后续激活步骤,📢 激活是将 Jetbrains 下所有产品激活; 在 scripts 文件夹下执行脚本: all-users 和 current-user 分别代表为所有用户安装或者为当前用户安装; 执行对应脚本,windows 对应 .vbs 文件,mac 对应 .sh 文件; 执行成功后,打开 IDEA 可选择多种方式激活: License server:填入 https://jetbra.in,实测不太稳定; Activation code:在参考链接 2 中 copy 对应 app 的 license; ...
推荐一种 Python 获取时间序列数据集的方式 pandas_dataloader
背景 来自真实世界场景的数据集对于构建和测试机器学习模型非常重要。如果想要一些时间序列数据来简单试验算法和评估模型但本地却没有测试数据,这种情况下就需要考虑如何拿到人工生成的或者真实的时序数据? 🧐之前都是通过接口自己来解析数据或者人工生成一些时序数据来测试,缺点是比较麻烦或者数据质量不高而且徒然增加自身工作量!作为调包侠这篇文章推荐一种 Python 数据获取库 —— pandas_datareader。 pandas-datareader Pandas-datareader 是基于 Python 的专门从一系列的公开在线数据库获取数据的工具库,可以实时地从网络中提取想要的数据并将其组装成一个 Pandas DataFrame。该接口在 urllib3 库基础上实现了以客户端身份访问在线数据库的各类金融财经股票数据,包括从Yahoo Finance 获取金融市场数据,从世界银行获取全球发展数据,从圣路易斯联邦储备银行获取经济数据等。 由于网页数据源的限制,pandas_datareader 只支持从有限数量的数据源读取数据,这些数据源大多与金融和经济时间序列相关,支持的输入源如下: ...
灵魂拷问:是否真的需要深度学习模型来预测时间序列?
背景 这一篇文章类似于 Rethinking 系列,主要想法来自于文章 Do We Really Need Deep Learning Models for Time Series Forecasting?。学术界不断增加模型复杂度以增加创新,而工业界就需要考虑模型的实际效果和模型解释性了,这一篇文章就通过实验证明:在时间序列预测任务中只要特征工程和模型参数处理合适,最经典的树模型预测效果同样优于最新的深度学习模型! 众所周知,与传统技术相比深度模型的一个主要缺点是过于复杂。与深度神经网络(DNN)模型相似,这篇文章中将时间序列预测任务转化为基于窗口的回归问题,通过实验证明经典模型 梯度推进回归树(GBRT)模型 的预测效果优于深度学习模型的结果。👍 既然是对比模型效果,那么就需要一些基准数据集和评价指标。 数据集 本文采用的数据集如下: 注:M=0M=0M=0 表示单指标,其它为多元序列。 本文采用的评价指标如下: 其中 yiy_{i}yi 为观测值,y^i\hat{y}_{i}y^i 为预测值。 RMSE:(Root Mean Squard Error)均方根误差 1 ...
时间序列趋势检验方法 Mann-Kendall Test 及其 Python 实现
背景 一般的统计方法难以对趋势性指标进行异常检测,因此需要采用一种方法支持缓慢变化的异常进行识别,如下图所示。 本文采用 Mann-Kendall Test 趋势检验方法 来检验序列趋势,上升或者下降。 其实根据最小二乘法拟合曲线求斜率也可以,但是上升趋势不一定是线性的。 Mann-Kendall Test 理论 Mann-Kendall Test (Mann 1945, Kendall 1975, Gilbert 1987) 的目的是统计评估变量随着时间变化,是否有单调上升或下降的趋势。单调上升(下降)的趋势意味着该变量随时间增加(减少),但此趋势可能是/不是线性的。 Mann-Kendall Test 可替代参数线性回归分析——线性回归可检验线性拟合直线的斜率是否不为零。 回归分析要求拟合回归线的残差是正态分布的,Mann-Kendall Test 不需要这种假设,Mann-Kendall Test 是非参数检验(不要求服从任何分布)。 Mann-Kendall Test 的基础假设: 当没有趋势时,随时间获得的数据是独立同分布的。独立的假设是说数据随着时间不是连续相关的 ...
Scala 中使用 JUnit 进行参数化测试
背景 上一篇文章简单学习了 Junit 单元测试语法,有一种情况是多个测试用例测试同一个类或者方法,因此需要参数化测试。 参考:https://stackoverflow.com/questions/4399881/parameterized-unit-tests-in-scala-with-junit4 在 Scala 中使用 JUnit 参数化测试比较坑,因此记录一个测试用例。 📢 主要步骤: 步骤一: 指定定参数运行器 步骤二:声明变量 步骤三:为测试类声明一个带有参数的公共构造函数,为变量赋值 步骤四:为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对 该方法必须由Parameters注解修饰 该方法必须为public static的 该方法必须返回Collection类型 该方法的名字不做要求 该方法没有参数 步骤五:编写测试方法,使用自定义变量进行测试 用例 123456 ...
Scala 单元测试框架 JUnit 使用
背景 在一些项目中不可避免地需要写一些单元测试,以此提升开发效率和方便地进行回归测试,是产品上线中非常重要的一部分,然而实际上算法工程师们好像并不在意单元测试~ 考虑到目前项目中主要是写 Scala,因此本文记录下 Scala/Java 中的单元测试框架 JUnit; 另一种框架 ScalaTest 是 Scala 原生的单元测试框架,本身与 JUnit 没有太多相似之处,为了与 Java 更兼容因此使用 JUnit 框架。 使用 首先需要添加 maven 依赖,主要考虑 JUnit4; 123456<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope></dependency> 添加后即可在 test 模块下添加测试单元; 语法 ...