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


  之前发布的一篇博客讲的是基于joinbase一种类似apriori算法得全连接空间挖掘算法,该算法在空间模式得阶增大时,算法的开销增长很大,所以这篇博客讲一讲一种非连接的算法基于无连接Join-Less的原理与实现,提出一种物化模型:星型邻居物化模型,可以通过这种物化模型生成候选co-location模式。

基本理论知识

空间特征

  空间特征(或称空间对象、属性),代表了空间中不同种类的事物。空间特征代表了空间中不同种类的事物的集合。记为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模式的。

星型邻居物化模型

  星型邻居物化模型是使用星型邻近关系物化空间数据集的空间邻近关系。简单来说就是用户指定一个邻近距离作为半径画一个圆,圆中的实例就具有星型邻近关系,用黑实线引出和中心实例具有星型邻近关系的实例。如图中的A1,B1和C1具有星型邻近关系。
  星型模型可以分为两类,相交的星型划分和不相交的星型划分。相交的划分存在重复的邻近关系,通常不使用。

  需要注意的是,一个实例的星型邻居是由中心实例和与它由邻近关系的邻居实例组成的集合,要求邻居实例的特征类型在字典序中比中心实例的大。采用字典序可以避免重复。
  如图中A1有两个邻居实例B1和C1,A1的星型邻居就是{A1,B1,C1},包含中心对象A1.而对于A3实例,它有三个邻居实例A4,B3和C1,但是按照定义A4不是A3的星型邻居。 同理B4有两个邻居实例A2和C2,但是A2不是B4的星型邻居实例。
在这里插入图片描述

主要步骤

下图是书上的算法描述
在这里插入图片描述
主要步骤说明:

  1. 首先将空间数据集物化成不相交的星型邻居集
  2. 生成候选co-location模式
    一阶co-location都是频繁的,作为初始化。k阶(k>1)阶候选集是从k-1阶频繁模式生成的。
  3. 从星型邻居集中产生候选co-location模式的星型实例
    候选co-location模式的星型实例是从星型邻居集收集得到的,要求星型邻居集的中心对象的特征类型和co-location模式的第一个特征相同。例如,co-location模式{B,C}的实例是从特征B的星型邻居集收集得到的,而co-location模式{A,B,C}的实例是从特征A的星型邻居集收集得到的。
  4. 利用co-location模式的星型实例产生粗糙的频繁co-location模式
    由于空间邻近关系是对称的,所以2阶星型实例就是团实例,无需检查是否成团。对于3阶或者更高阶,需要检查星型实例是否为团实例,但是在检查前需要对候选模式实施粗糙过滤,也就是剔除候选co-location模式中不满足最小参与率的模式。
  5. 过滤co-location实例
    也就是检查co-location实例是否成团,不成团的实例删除
  6. 选择频繁的co-location模式
  7. 生成co-location模式规则

在这里插入图片描述
上图是一个根据星型邻居物化模型生成co-location模式的例图

代码

首先导入需要用到的库

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

用于展示数据集的画图函数,可以不要

def drawData(E,R):
    values=[x[2] for x in E]
    x = np.array(values)[:,0]
    y = np.array(values)[:,1]
    n = [x[0]+str(x[1]) for x in E]
    fig,ax=plt.subplots(figsize=(12, 7))
    ax.scatter(x,y)

    for i,txt in enumerate(n):
        ax.annotate(txt,(x[i],y[i]))

    for i in range(len(values)-1):
        for j in range(i+1,len(values)):
            if math.sqrt((values[j][0]-values[i][0])**2 + (values[j][1]-values
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值