关联分析中SPADE算法

2023-10-30 16:10
文章标签 算法 分析 关联 spade

本文主要是介绍关联分析中SPADE算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

SPADE算法

例题讲解:


SPADE算法

spade序列关联分析(时序关联分析):即同一个对象在不同时间点对商品进行购买。

序列(sequence)数据库:序列数据库(sequence databases)S是包含一个或多个序列数据的数据集,是元组<SID,s>的集合,其中SID是序列编号,s是一个序列,每个序列由若干事件构成。

序列(sequence):序列是事务的有序列表,可以记作s=<e1,e2,e3,…,el>,其中ej(1≤j≤l)表示事件,也称为s的元素;序列包含的项的数量记作序列的长度;

事件: 事件e是一个项集,可以记作e=(i1,i2,i3,…,in);其中事件中的元素ij(1≤j≤n)表示项

子序列:设序列a= <a1a2…an>,序列b = <b1b2…bm>,ai 和bi都是元素。如果存在整数1 <= j1 < j2 <…< jn <= m,使得a1 包含于 bj1,a2 包含于 bj2,…, an  包含于 bjn则称序列a为序列b的子序列,又称序列a包含序列b,记为a 包含于b。

举例说明:

例如序列<{2},{1,3}>是序列<{1,2},{5},{1,3,4}>的子序列,因为{2}包含在{1,2}中,{1,3}包含在{1,3,4}中。

而<{2,5},{3}>不是序列<{1,2},{5},{1,3,4}>的子序列,因为前者中项2和项5是一次购买的,而后者中项2和项5是先后购买的,这就是区别所在。

定义(前缀) 前缀形式化定义如下:定义一个函数p:(S,N)→S,其中S是一个序列集合,N是一个非负整数,p(X,k)=X[1:k],换句话说,p(X,k)返回X的k长度的前缀。 在序列格S上定义一个等价关系如下:X,Y∈S,当且仅当p(X,k)=p(Y,k),也就是说这两个序列共享长度为k的前缀,则它们是θk等价的,记为 。由X构成的等价类记为 。

在该序列格上由θ1导出的等价类集合是{[A],[B],[D],[F]},称这些第一层的类为父类,在图中下方。可以看到,所有具有共同前缀的序列被划分到同一等价类中,每个等价类都是序列格的一个子格。 

    只有同一个类中的两个k-序列才能进行时态连接运算,并产生长度为(k+1)的候选序列。 因此,为了产生所有(k+1)-序列,仅需要在每个前缀等价类中执行一个简单的时态连接即可,而这种连接可被独立处理。

根据被连接的原子类型,可得3种可能的频繁序列:

1.两个事件原子项连接:<AB>和<AC>进行连接得到<ABC>。

2.事件原子项与序列原子项之间连接:<AB>和<A,C>进行连接得到<AB,C>。

3.序列原子项与序列原子项之间连接:<A,B>与<A,C>进行连接得到<A,BC>、<A,B,C>或<A,C,B>。

一个特殊的情况是,当对<A,B>进行自连接时,则只能产生唯一的新序列<A,B,B>。

 下面举例说明:

水平数据格式转换为垂直数据格式,1序列的ID_list就是含有项集1,项集2......到最后的SID和EID

(购买人和时间点)

2序列的ID_list就项集1,2,3,4,5,6的两两交集(1,2)(1,3)(2,3)........到最后的SID和EID(购买人和时间点)

 

 

 

    以上怎么理解呢,就是说如果P->A->F得到的一定是F中大于A的SID和EID,也就是A要包含于F(这里的包含是指一个事件的包含,不是全部都要包含,满足一个即可),所以P->F->A中F要包含于A,则A中只有(8,50)(8,80)满足。P-AF就是AF相交。

以下是序列D->BF->A的实现过程。

例题讲解:

这篇关于关联分析中SPADE算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309083

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑