空间co-location模式挖掘基于全连接Join-Base原理与实现


  简单来说该文章就是将apriori算法应用到空间模式的挖掘,将事务篮子换为co-location模式,将事务等价为行实例和表实例。引入参与率和参与度来等价支持度。频繁项的挖掘和关联规则的生成还是遵循apriori算法的步骤和核心思想,即先验原理(频繁模式的子集一定是频繁的,非频繁模式的超集一定是不频繁的)。

基本理论知识

空间特征

  空间特征(或称空间对象、属性),代表了空间中不同种类的事物。空间特征代表了空间中不同种类的事物的集合。记为F = {f1, f2, f3, …, fn}。把一个具体空间位置上的对象称为空间实例。将实例的集合称为实例集,记为 S = S1 U S2 U …Sn,其中Si(1<=i<=n)是对应空间特征fi的实例集合。

  一个具体空间位置上的对象称为对象的空间实例。如A1,2,3,4为A的实例。 如空间中有四个空间特征F={A,B,C,D}.空间特征A有4个实例A1到A4,B有5个实例B1到B5,C有3个实例。

邻近关系

  空间邻近关系:描述了空间实例之间的空间关系。可以是拓扑、距离、混合关系。空间邻近关系需要满足自反性和对称性。
  以距离关系为例,空间邻近关系R为欧式距离小于等于阈值d,表示为:

  分布图中一个完全联通子图就是一个团。如{A3,B3,C1,D1}就是一个团

空间co-location模式

  一组空间特征集合c,其中c⊆F。如图中{A,B,C}就是一个co-location模式。

行实例和表实例

  行实例表示团包含了co-location模式c中的所有特征,并且它的子集不包含c中的所有特征。co-location模式c中的所有行实例集合为表实例。
  co-location模式c的长度称为co-location模式的阶。如co-location{A,B,C}的阶为3。
如:
  例如:假设{A3,C1,C3}都满足两两邻近,但是不是co-location{A,C}的行实例
   co-location{A,B,C}的行实例为{A2,B4,C5}和{A3,B3,C1}。所以表实例为{ {A2,B4,C5},{A3,B3,C1}}

参与率与参与度

  简单来说就是数据挖掘里面的支持度,在空间数据挖掘中引入参与率
  参与率表示为PR(c,fi),它是fi的实例在空间co-location模式c的所有实例中不重复出现的个数与fi总实例个数的比率。

其中Π是关系投影

  参与度表示为PI(c),它是空间co-location模式c的所有空间特征的PR值中的最小值。

  min_prev是用户给定的最小参与度(最小频繁性)阈值,当PI©>=min_prev 时,称为co-location模式c是频繁的。

co-location规则

  c1 => c2(p,cp)称为co-location规则,其中c1和c2是co-location模式,c1∩c2不等于空集,p是规则参与度,cp是规则的条件概率。
  条件概率cp是从co-location模式c1推出co-location模式c2的可信度

主要步骤

类似于关联规则挖掘,大多数co-location挖掘算法通常将挖掘任务分解为如下两个子任务:

  1. 频繁co-location产生:其目标是发现满足最小参与度阈值min_prev的所有co-location模式。
  2. co-location规则产生:其目标是从上一步发现的频繁co-location模式中提取所有高条件概率的规则。

全连接算法Join-Base:

  • 候选co-location的生成:由频繁k阶模式,生成k+1阶候选模式,在判断是否频繁,过程类比apriori算法
  • 表实例的生成:k阶模式c1和k阶模式c2连接得到k+1阶候选模式c3,则候选模式c3的表实例是由模式c1的表实例和模式c2的表实例按前k-1个特征相同进行链接,同时要求最后两个实例满足邻近关系R。

书中给出的算法步骤

代码实现

我是基于python实现的,算法步骤与书中给出的步骤有一点出入
说明:
P是频繁项,C是候选项,T_cu是未判断是否满足参与率的表实例集合,T是满足参与率的表实例集合。
首先导入需要用到的包

import itertools
import copy
import math
import numpy as np
import matplotlib.pyplot as plt

准备好需要用到的数据

min_prev = 0.3 #最小参与率
min_conf = 0.3 #最小置信度
ET = ["A","B","C","D"]
E = [["A",1,[24,14]]
    ,["A",2,[64,44]]
    ,["A",3,[46,24]]
    ,["A",4,[63,7]]
    ,["B",1,[13,3]]
    ,["B",2,[19,45]]
    ,["B",3,[47.5,10.5]]
    ,["B",4,[62,52]]
    ,["B",5,[13,50]]
    ,["C",1,[39,11]]
    ,["C",2,[52,50]]
    ,["C",3,[40,36]]
    ,["D",1,[40,20]]
    ,["D",2,[6,10]]]
R = 16 #设最小邻近关系的距离为16

将数据做可视化,看一下数据的基本关系

#定义可视化函数,方便查看数据之间的关系
def drawData(E,R):
    values=[x[2] 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值