基于的图的异常检测算法OddBall

OddBall异常检测算法出自2010年的论文《OddBall: Spotting Anomalies in Weighted Graphs》,它是一个在加权图(weighted graph)上检测异常点的算法,基本思路为计算每一个点的一度邻域特征,然后在整个图上用这些特征拟合出一个函数,再根据拟合出来的参数计算每个点的异常分数,所以它可以用于无监督场景。

OddBall检测的异常情况如论文图1所示的四种情况:

  • Near-cliques: 节点的邻居之间紧密联系,典型的情况可能是恐怖组织或者成员之间非常活跃的讨论组。(clique是图里的团,一个clique里的节点两两之间都有一条边)
  • Near-starts: 星状结构,节点的邻居之间几乎没有什么联系,典型的情况有中介、电话销售、机器营销号码等。
  • Heavy vicinities: 节点的邻居个数固定,但是这些边对应的权重之和异常地大。比如在一个电话网络里,一个节点只有有限的n个联系人,但是总的呼叫次数非常大,与n不成比例,说明可能存在强制重拨的异常设备,或者在伪造通话记录等。
  • Dominant heavy links: 图里有某一条边的权重占主导地位。比如在一个电话网络里,一个stalker可能会在短时间内不停地给某个联系人打非常多的电话。

论文借用社交网络分析(social network analysis, SNA)的术语,将图中每一个节点称为’ego’,将一个节点与其1-step邻居节点组成的网络称为egonet。一个节点k-step邻居即从节点出发k步能到达的邻居节点集合,这些邻居节点之间组成了一个子图。关于k的选择,论文推荐使用k=1,有之前的论文表明现实中的图有比较小的直径,论文实验时也发现k>1没有提供更多的信息。(不过在想随着这些年社交媒体和移动互联网的快速发展,现在的数据来说k>1在一些场景下是可能提供更多信息的)

对一个egonet,选择什么特征来描述它呢?比如很容易能想到的特征有:节点个数、边个数、特征值、三角形个数、度为1的邻居的个数等。论文经过试验,最终选择了如下4个特征来刻画egonet:

  • N i N_i Ni: ego i对应的邻居个数,即节点i的度。
  • E i E_i Ei:egonet i包含的边的数目。
  • W i W_i Wi:egonet i的总权重。
  • λ w , i \lambda_{w,i} λw,i:egonet i的带权邻接矩阵的主要特征值。

接着,论文用这4个特征组成特征对来检测前面提到的几种异常:

  • E E E vs N N N: 用来检测near-cliques和near-stars。
  • W W W vs E E E: 用来检测Heavy Vicinity。
  • λ w \lambda_w λw vs W W W: 用来检测Dominant heavy links。

在检测异常时,自然地就会问一个正常的邻居节点是什么样子的呢?基于上述特征对,Oddball作者们总结了下文的一些模式。对于一个给定的图 G \mathcal{G} G,其节点i i ∈ V ( G ) i \in \mathcal{V(G)} iV(G), 节点的i的egonet记为 G i \mathcal{G}_i Gi。(注:如果只想知道Oddball是如何计算异常分数的,下面这些模式可先略过不看,不过这些模式有助于理解Oddball的异常分数计算思路)

观察1 (EDPL: Egonet Density Power Law) : G i \mathcal{G}_i Gi的邻居个数 N i N_i Ni和边的条数 E i E_i Ei满足幂率:
E i ∝ N i α , 1 ≤ α ≤ 2 E_i \propto N^{\alpha}_i, \ 1 \le \alpha \le 2 EiNiα, 1α2
在论文实验时的指数 α \alpha α大小为1.10到1.66。论文图2示意了这个观察(图是在对数维度画的),当斜率为2时,代表图为一个clique,而斜率为1,代表图为star。

WeChatWorkScreenshot_f247325c-5239-4c23-bdee-10052db54770

观察2 (EWPL: Egonet Weight Power Law): G i \mathcal{G}_i Gi的总权重 W i W_i Wi和边的条数 E i E_i Ei满足幂率:
W i ∝ E i β , β ≥ 1 W_i \propto E^{\beta}_i, \ \beta \ge 1 WiEiβ, β1

论文图3展示了数据集的EWPL示意, β \beta β最大达到了1.29, β > 1 \beta>1 β>1表明随着边的增加,权重之和的增加有超线性的增长。

观察3 (ELWPL: Egonet λ w \lambda_w λw Power Law): G i \mathcal{G}_i Gi的带权邻接矩阵的主要特征值 λ w , i \lambda_{w,i} λw,i和总权重 W i W_i Wi满足幂率:
λ w , i ∝ W i γ , 0.5 ≤ γ ≤ 1 \lambda_{w,i} \propto W^{\gamma}_i, \ 0.5 \le \gamma \le 1 λw,iWiγ, 0.5γ1

论文图4示意了数据集的ELWPL,实验中 λ \lambda λ范围为0.53至0.98。 γ = 0.5 \gamma=0.5 γ=0.5表示均匀的权重分布, γ ∼ 1 \gamma \sim 1 γ1表示在egonet中有显著权重边。 γ = 1 \gamma=1 γ=1表示egonet只有一条边。

观察4 (ERPL: Egonet Rank Power Law): G i \mathcal{G}_i Gi中的边j的排序 R i , j R_{i,j} Ri,j和权重 W i , j W_{i,j} Wi,j满足幂率:
W i , j ∝ R i , j θ , θ ≤ 0 W_{i,j} \propto R^{\theta}_{i,j}, \ \theta \le 0 Wi,jRi,jθ, θ0

R i , j R_{i,j} Ri,j是边j按照边权重排序之后的排名。ERPL表明在egonet中边的权重分布是倾斜的。这个是符合直觉的,比如在一个朋友网络中,一个人会有许多不亲近的朋友,但只有少数几个亲近的朋友。接着论文证明了如果ERPL成立,则EWPL也成立。

有了前面这些铺垫,现在让我们看看Oddball是如何计算异常分数的。对于前面提到的特征对(根据检测异常类型选择特征对),设节点i的对应的y值记为 y i y_i yi,对应的x值为 x i x_i xi,假设对于数据集可以拟合得到一个幂率方程 y = C x θ y = C x^{\theta} y=Cxθ,定义节点i的异常分数为:

out-line ( i ) = max ⁡ ( y i , C x θ ) min ⁡ ( y i , C x θ ) ∗ log ⁡ ( ∣ y i − C x θ ∣ + 1 ) \text{out-line}(i) = \frac{\max(y_i, C x^{\theta})}{\min(y_i, C x^{\theta})} * \log(|y_i - C x^{\theta}| + 1) out-line(i)=min(yi,Cxθ)max(yi,Cxθ)log(yiCxθ+1)

直观上,Oddball的异常分数度量“偏离拟合曲线的距离”,当真实值 y i y_i yi与期望值 C x θ C x^{\theta} Cxθ相等时,异常分数为最小值0。

作者发现Oddball有时候检测不到一些异常点,比如在图2(a)中的左三角标记的点,它们与其他点隔的很远但是几乎就在拟合线上。所以作者提出将Oddball异常分数与基于密度的异常检测方法一起结合使用。在论文中,使用的基于密度的异常检测方法是LOF方法,将Oddball分数和LOF分数进行归一化后(通过除以最大值的方式)求和得到最终的异常分数,即 out-score ( i ) = out-line ( i ) + out-lof ( i ) \text{out-score}(i) = \text{out-line}(i) + \text{out-lof}(i) out-score(i)=out-line(i)+out-lof(i)

实践经验:1. 在计算一个egonet里的边的数目时,可以通过计算egonet里三角形个数和其度之和来得到。因为现有的工具比如Spark GraphX里已经有三角形个数和度计算的现成接口。2. 计算LOF时,在图里怎么算距离呢? 把选定的特征对数据作为LOF的特征再计算距离。

参考资料

  1. OddBall: Spotting Anomalies in Weighted Graphs
  2. 实现: oddball 作者主页上的matlab代码, github上的python实现:1, 2

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

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

相关文章

网络工程师教程第6版(2024年最新版)

网络工程师教程(第6版)由清华大学出版社出版,由工业和信息化部教育与考试中心组编,张永刚、王涛、高振江任主编,具体介绍如下。 相关信息: 出版社: 清华大学出版社 ISBN:9787302669197 内容简介: 本书是工业和信息化部教育与考试中心组织编写的考试用书。本书 根据…

算法复杂度——大O表示法

参考视频:常见的大O表示法有哪些?时间复杂度是什么?_哔哩哔哩_bilibili

Maven maven项目构建的生命周期 Maven安装配置 IDEA 配置 Maven

一,Maven的概述 Maven的作用:专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化的项目结构提供了一套标准化的构建流程(编译,测试,打包,发布……)提…

排序算法(基础)大全

一、排序算法的作用: 排序算法的主要作用是将一组数据按照特定的顺序进行排列,使得数据更加有序和有组织。 1. 查找效率:通过将数据进行排序,可以提高查找算法的效率。在有序的数据中,可以使用更加高效的查找算法&…

GraphLLM:基于图的框架,通过大型语言模型处理数据

GraphLLM是一个创新的框架,它允许用户通过一个或多个大型语言模型(LLM)来处理数据。这个框架不仅提供了一个强大的代理,能够执行网络搜索和运行Python代码,还提供了一套工具来抓取网页数据,并将其重新格式化…

TransFormer--解码器:概括

TransFormer--解码器:概括 假设我们想把英语句子I am good(原句)翻译成法语句子Je vais bien(目标句)。首先,将原句I am good送入编码器,使编码器 学习原句,并计算特征值。在前文中&…

3D Gaussian Splatting 代码层理解之Part1

2023 年初,来自法国蔚蓝海岸大学和 德国马克斯普朗克学会的作者发表了一篇题为“用于实时现场渲染的 3D 高斯泼溅”的论文。该论文提出了实时神经渲染的重大进步,超越了NeRF等以往方法的实用性。高斯泼溅不仅减少了延迟,而且达到或超过了 NeRF 的渲染质量,在神经渲染领域掀…

K8s学习笔记之了解k8s的网络模型

文章目录 docker 网络模型容器与容器之间,容器与宿主机之间如何通信容器访问外部网络外部网络访问容器 k8s 网络模型CNIpod 网络配置流程 k8s 热门网络插件介绍Flannel 来源Calico 来源Cilium 来源 k8s 网络插件的工作模式Flannel 的工作模式Calico 的工作模式BGP 和…

探索高效的 Prompt 框架:RBTR 提示框架的奥秘与优势

前言 在当今数字化的时代,人工智能(AI)已经成为我们生活和工作中不可或缺的一部分。而 Prompt 作为与 AI 交互的关键工具,其质量直接影响着我们获取信息的准确性和有用性。今天,我们将深入探讨一个通用的 Prompt 框架…

丹摩征文活动 | 深度学习实战:UNet模型的训练与测试详解

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 1、云实例:配置选型与启动1.1 登录注册1.2 配置 SSH 密钥对1.3 创建实例1.4 登录云实例 2、云存储:数据集上传…

# 10_ Python基础到实战一飞冲天(一)--linux基础(十)

10_ Python基础到实战一飞冲天(一)–linux基础(十)–软链接硬链接-tar-gzip-bzip2-apt-软件源 一、其他命令-04-文件软链接的演练实现 1、ubuntu 桌面文件如下图: 2、需求:文件软链接的演练(演…

Python学习27天

字典 dict{one:1,two:2,three:3} # 遍历1: # 先取出Key for key in dict:# 取出Key对应的valueprint(f"key:{key}---value:{dict[key]}")#遍历2,依次取出value for value in dict.values():print(value)# 遍历3:依次取出key,value …

【Linux】进程的优先级

进程的优先级 一.概念二.修改优先级的方法三.进程切换的大致原理:四.上下文数据的保存位置: 一.概念 cpu资源分配的先后顺序,就是指进程的优先权(priority)。 优先权高的进程有优先执行权利。配置进程优先权对多任务环…

ubuntu无密码用SCP复制文件到windows

默认情况下,ubuntu使用scp复制文件到windows需要输入密码: scp *.bin dev001@172.16.251.147:~/Desktop/. 为了解决每次复制文件都要输入密码这个问题,需要按如下操作: 1.创建ssh密钥 ssh-keygen -t ed25519 -C "xxx_xxx_xxx@hotmail.com" 2.使用scp复制公钥到w…

单片机GPIO中断+定时器 软件串口通信

单片机GPIO中断定时器 软件串口通信 解决思路代码示例 解决思路 串口波特率9600bps,每个bit约为1000000us/9600104.16us; 定时器第一次定时时间设为52us即半个bit的时间,其目的是偏移半个bit时间,之后的每104us采样并读取1bit数据。使得采样…

使用Web Components构建模块化Web应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Web Components构建模块化Web应用 使用Web Components构建模块化Web应用 使用Web Components构建模块化Web应用 引言 Web Co…

每行数据个数在变的二维数组的输出

#include<stdio.h> int main() {//定义四个一维数组int arr1[1] { 1 };int arr2[3] { 1,2,3 };int arr3[5] { 1,2,3,4,5 };int arr4[7] { 1,2,3,4,5,6,7 };//把四个一维数组放进一个二维数组int* arr[4] { arr1,arr2,arr3,arr4};//预先计算好每一个数组真实的长度in…

【SSL证书】腾讯云SSL续签备忘录

适用于证书过期了&#xff0c;需要替换证书的场景。本备忘录为nginx使用证书场景 步骤&#xff1a;一共7步。 登录腾讯云控制台->申请免费证书->腾讯云审核->下载->登录服务器->替换证书->重启nginx 1.登录控制台 https://console.cloud.tencent.com/ssl…

AVL树

一.AVL树的概念 AVL树是一颗特殊的二叉搜索树。二叉搜索树在有些极端情况下可能会出现单支的情况&#xff0c;这会影响其插入查找的效率。而AVL树是一个高度平衡的二叉搜索树&#xff0c;它要求任何的左右子树的高低差都小于等于1。它可以通过去控制左右子树的高度差来控制二叉…

鸿蒙开发-网络数据访问、应用本地数据保存

HTTP概述 HTTP&#xff0c;全称Hyper Text Transfer Protocol 超文本传输协议。 HTTP请求为短连接。客户端发起请求&#xff0c;服务器返回响应。本次连接即结束。 添加网络权限 在访问网络之前&#xff0c;需要在module.json5中给APP添加网络权限 "module": {&…