AGM算法

本文介绍了一种基于图数据库的频繁子图挖掘算法FSM,详细阐述了算法如何处理带标签的图,包括生成邻接矩阵、计算支持度、合并矩阵以及将非正规形式矩阵转换为正规形式的过程。并解释了如何通过统计正常形式来确定频繁子图。

G(V,E,LV,LE,φ)G(V,E,L_V,L_E,\varphi)G(V,E,LV,LE,φ)表示一个带标签的图,其中VVVEEE分别表示顶点集和边集,LVL_VLVLEL_ELE分别表示顶点和边的标签集,φ\varphiφ是一个标签函数定义了V→LVV \to L_VVLVE→LEE \to L_EELE的映射。
FSM算法根据操作的数据不同,可以分为针对图数据库的和针对一个大图的(现在只讨论exact match方法)。
根据每个顶点标签的id对顶点进行排序,然后根据该顺序生成邻接矩阵XkX_kXkkkk表示顶点个数。邻接矩阵中每个元素表示该边标签的id。
对于
Xk=(x1,1x1,2x1,3⋯x1,kx2,1x2,2x2,3⋯x2,kx3,1x3,2x3,3⋯x3,k⋮⋮⋮⋱⋮xk,1xk,2xk,3⋯xk,k)X_k=\begin{pmatrix} x_{1,1} & x_{1,2} & x_{1,3} &\cdots &x_{1,k}\\ x_{2,1} & x_{2,2} & x_{2,3} & \cdots &x_{2,k}\\ x_{3,1} & x_{3,2} & x_{3,3} & \cdots &x_{3,k}\\ \vdots & \vdots & \vdots &\ddots &\vdots \\ x_{k,1} & x_{k,2} & x_{k,3} & \cdots &x_{k,k}\\ \end{pmatrix}Xk=x1,1x2,1x3,1xk,1x1,2x2,2x3,2xk,2x1,3x2,3x3,3xk,3x1,kx2,kx3,kxk,k
如果是无向图,则code(Xk)=x1,1x1,2x2,2x1,3x2,3x3,3x1,4⋯xk−1,kxk,kcode(X_k)=x_{1,1}x_{1,2}x_{2,2}x_{1,3}x_{2,3}x_{3,3}x_{1,4}\cdots x_{k-1,k}x_{k,k}code(Xk)=x1,1x1,2x2,2x1,3x2,3x3,3x1,4xk1,kxk,k
如果是有向图,则code(Xk)=x1,1x1,2x2,1x2,2x1,3x3,1x2,3x3,2⋯xk−1,kxk,k−1xk,kcode(X_k)=x_{1,1}x_{1,2}x_{2,1}x_{2,2}x_{1,3}x_{3,1}x_{2,3}x_{3,2}\cdots x_{k-1,k}x_{k,k-1}x_{k,k}code(Xk)=x1,1x1,2x2,1x2,2x1,3x3,1x2,3x3,2xk1,kxk,k1xk,k
对于一个子图GsG_sGs,定义它的支持度sup(Gs)sup(G_s)sup(Gs)为数据库中包含该子图的图的个数与总数的比值。
如果两个邻接矩阵XkX_kXkYkY_kYk除了第kkk行和第kkk列不同外,其余元素均相同,则将两个矩阵合并生成Zk+1Z_{k+1}Zk+1。如下所示:
Xk=(Xk−1x1x2Txkk)X_k = \begin{pmatrix} X_{k-1} & \boldsymbol {x_1}\\ \boldsymbol {x^T_2} & x_{kk}\\ \end{pmatrix}Xk=(Xk1x2Tx1xkk)Yk=(Yk−1y1y2Tykk)Y_k = \begin{pmatrix} Y_{k-1} & \boldsymbol {y_1}\\ \boldsymbol {y^T_2} & y_{kk}\\ \end{pmatrix}Yk=(Yk1y2Ty1ykk)

Zk+1=(Xk−1x1y1x2Txkkzk,k+1y2Tzk+1,kykk)Z_{k+1} = \begin{pmatrix} X_{k-1} & \boldsymbol {x_1} & \boldsymbol {y_1}\\ \boldsymbol {x^T_2} & x_{kk}& z_{k,k+1}\\ \boldsymbol {y^T_2} &z_{k+1,k}& y_{kk}\\ \end{pmatrix}Zk+1=Xk1x2Ty2Tx1xkkzk+1,ky1zk,k+1ykk,也可写成
在这里插入图片描述
其中,新矩阵中的元素满足下列关系:
在这里插入图片描述
如果是无向图,那么zk+1,kz_{k+1,k}zk+1,kzk,k+1z_{k,k+1}zk,k+1相同。该合并操作可以产生多个Zk+1Z_{k+1}Zk+1矩阵,这是因为vkv_kvkvk+1v_{k+1}vk+1的构成的边的label可以有多种选择,因为图数据库中不同的图中这两个点之间的边的不同,也就造成了该边的label的不同,因此zk+1,kz_{k+1,k}zk+1,kzk,k+1z_{k,k+1}zk,k+1有多个选择,还有一种选择是没有边,既0。
XkX_kXkYkY_kYk中的vkv_kvk的label相同时,交换XkX_kXkYkY_kYk后生成的矩阵是一样的,为了避免这种情况,只有当code(the first matrix)<=code(the second matrix)code(the\ first\ matrix)<=code(the\ second\ matrix)code(the first matrix)<=code(the second matrix)时才生成矩阵,生成的矩阵也被称为normal form。只有当大小为k+1k+1k+1的图GGG的所有kkk子图都是频繁子图时,GGG才是频繁子图候选项。
如果通过删除一个节点得到的子图不是normal form,必须将其转换成normal form之后才能判断该子图是否已经生成过。通过以下步骤,可以将一个non-normal form 的矩阵XkX_kXk转换成normal form的矩阵Xk′X'_kXk:(1)对XkX_kXk中的每个节点生成一个1×11 \times 11×1的邻接矩阵;(2)对于点vi,vj∈G(Xk)v_i,v_j \in G(X_k)vi,vjG(Xk),如果其邻接矩阵符合合并条件,则合并;(3)不断地合并新生成的矩阵,知道获得了一个k×kk \times kk×k的矩阵Xk′X'_kXk。该过程涉及到的是行列式的操作,因此可以表示成Xk′=(Tk)TXkTkX'_k=(T_k)^T X_k T_kXk=(Tk)TXkTk
当所有候选子图生成后,需要统计每个子图的支持度。但是每个图的normal form并不是唯一的。因此需要将代表同一个子图的不同的normal form的支持度加在一起。为了索引代表同一个子图的不同normal form,定义了normal form的canonical form。定义GGG的canonical form是GGG的normal form中codecodecode最小的。令Xk−1mX^m_{k-1}Xk1m表示G(Xk)G(X_k)G(Xk)移除点vmv_mvm后得到的图。Xk−1′mX^{'m}_{k-1}Xk1m表示Xk−1mX^m_{k-1}Xk1m经过Tk−1mT^m_{k-1}Tk1m变换后得到的normal form。Xk−1′mX^{'m}_{k-1}Xk1m经过Sk−1mS^m_{k-1}Sk1m变换后得到canonical form。整体过程可表示为(Tk−1mSk−1m)TXk−1mTk−1mSk−1m(T^m_{k-1}S^m_{k-1})^TX^m_{k-1}T^m_{k-1}S^m_{k-1}(Tk1mSk1m)TXk1mTk1mSk1m
那么我们可以用SkmS^m_kSkmTkmT^m_kTkmXkX_kXk转换成canonical formXckX_{ck}Xck。而SkmS^m_kSkmTkmT^m_kTkm又可以通过Sk−1mS^m_{k-1}Sk1mTk−1mT^m_{k-1}Tk1m获得。具体过程如下所示:
在这里插入图片描述
寻找频繁子图时,对数据库中的每个图从1到k的构造子图,并计算每个子图的支持度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值