GSP算法在数据挖掘中的应用

文章目录

  • 一:基本概念介绍
  • 二:从一个样例入手
  • 三 论文中定义的一些细节
  • 四:GSP算法
  • 五.算法
  • 六 源代码及数据集等总结
  • 七. 参考文章

一:基本概念介绍

序列模式挖掘:指挖掘相对时间或其他模式出现频率高的模式

序列模式挖掘的动机:大型连锁超市的交易数据有一系列的用户事物数据库。每一条记录包括用户的ID,事物发生的时间和事物涉及的项目。如果能够在其中挖掘涉及事物间关联关系的模式,即用户几次购买行为间的联系,可以采用更有针对性的营销措施。

序列:(sequence) 以SID表示,一个序列即是一个完整的信息流

序列符号化表示:序列是不同项目集的有序排列。序列s可以表示为s = <s1,s2,s3,…,sl>, sj(1<= j <= l)为项目集(itemset),也称为序列s的元素

序列的长度:序列的元素可以表示为(x1,x2,x3,…,xm),xk (1<= k <= m)为不同的项目。一个序列中所包含的所有项的个数称为序列的长度

项目:(item) 序列中最小组成单位的集合。e g: {A,B,C}.

事件:(event)通常用时间戳标志,标识事件的前后关系,又叫itemset.是item的集合

项目集:(itemset)是各种项目组成的集合

k-频繁序列:如果频繁序列项目个数为K,称为k频繁序列。eg:<(面包,苹果)> 为2频繁序列

序列模式:一个用户在不同时间点的交易记录就构成了一个购买序列

【注意:易错之处】
【注意一:】:k频繁序列:频繁序列中项目的个数为k;(是项目的个数,不是项目集)eg:<(面包,苹果)> 为2频繁序列

【注意二:】:序列的长度:频繁序列中项目集的个数为k;(是项目的个数,不是项目集)eg:<(面包,苹果)> 长度为1

【注意三:】:序列的大小:序列中物品的个数

【注意四:】:易错点:挖掘过程中的k-频繁集(Lk)或者候选k-集(Ck)指的都是【注意一和注意三】中的序列大小。

二:从一个样例入手

2.1.按照常规整理为序列
C1:<(Ringworld) (Foundation) (Ringworld Engineers , Second Foundation)>

C2:<(Foundation , Ringworld) (Foundation and Empire) (Ringworld Engineers)>

2.2.我们学习GSP算法论文中摘要提出的关键新奇的思路
First, we add time constraints that specify a minimum and/or maximum time period between adjacent elements in a pattern.

      Second, we relax the restriction that the items in an element of a sequential pattern must come from the same transaction, instead allowing the items to be presentin a set of transactions whose transaction-times are within a user-specifed time window.              Third, given a user-defined taxonomy(is-a hierarchy) on items, we allow sequential patterns to include items across all levels of the taxonomy

2.3.结合我们实际的例子来解释我们摘要中的思路
【1】第一条:我们添加时间限制,指定模式中相邻元素一个最小和最大的时间段。

   【2】第二条:我们放松了序列中一个项集的定义限制,只要序列中不同项集的交易时间在我们用户指定的一个滑动时间窗口。【3】第三条:给物品一个用户指定的分类,允许序列模式中包含分类法中所有级别的项。样例解释:2.3.1最大/最小时间间隔,例如设定max-gap = 30

虽然C2:<(Foundation , Ringworld) (Foundation and Empire) (Ringworld Engineers)>中的(Foundation , Ringworld) 和 (Ringworld Engineers)是属于同一个序列,但是他们的交易时间一个是1,一个是50,显然超过了最大的max-gap(换到实际上面理解就是:我们只关心一个顾客在一个星期里面的购物记录,不关心一个顾客十年前的购物记录,因为时间太长没有连续性,不存在研究意义)

也就是说“人在心不在”即看似这两个项集在同一个序列里面,但是频繁模式挖掘的时候不当做一个序列里面了。

2.3.2 滑动时间窗口。例如我们设置7天的时间窗口。

原始对应的序列为:

C1:<(Ringworld) (Foundation) (Ringworld Engineers , Second Foundation)>

但是当我们考虑滑动时间窗口为7之后,(Ringworld) 和 (Foundation)这两个项集就可以合并为一个项集了,即(Ringworld , Foundation)。这样一来,在挖掘的结果上序列中项集的形式和意义都会有所改变了。

2.3.3 添加分类限制。
例如我们挖掘到的频繁序列要属于同一类别,多了一个限制条件

<(Foundation) (Asimov)>论文中的例子:引入分类后,支持就向上扩展了。

三 论文中定义的一些细节

GSP: 翻译过来的意思是广义的序列模式。

论文中提到的元素指的就是一个项集。

3.1 子序列的定义:

3.2 邻接子序列:
3.2.1 邻接子序列出现的原因

    最大跨度影响序列模式发现算法的支持度计数,施加最大时间跨度约束之后,有些数据序列就不再支持候选模式。也就是说使用最大间隔约束可能违反先验原理,以图2.1为例,无约束情形下,<{2} {5}>和<{2}{3}{5}>的支持度都是60%,若施加约束mingap=0,maxgap=1,<{2} {5}>的支持度下降至40%(缺少D的支持),而<{2}{3}{5}>的支持度仍是60%,即超集的支持度比原集要高——与先验原理违背。使用邻接子序列的概念可避免这一问题。还是因为同一个序列中有些时间相隔太远的项集不能去参与频繁模式挖掘。

3.2.2 邻接子序列的定义:

3.2.3 邻接子序列举例

注意:以前的子序列中,<(1,2) (3, 4) (6) >属于s的子序列,但不属于邻接子序列。

3.3 滑动窗口的定义

3.4 最大最小时间限制

3.5 序列模式与广义序列模式的关系
GSP算法中提出的想法,如果将其中的一些变量设置为特定的值,则广义化序列模式挖掘就变成传统的序列模式挖掘了

四:GSP算法

论文中主要从这三个方面来进行讲解:1) Candidate Generation , 2)Counting Candidates ,3)Taxonomies

4.1 候选集产生
添加阶段:

一对频繁(k-1)序列合并,产生候选k-序列。为不重复产生,合并原则如下:

序列S1与序列S2合并,仅当从S1中去掉第一个事件得到的子序列与从S2中去掉最后一个事件得到的子序列相同,合并结果为S1与S2最后一个事件的连接,连接方式有两种:

1)若S2的最后两个事件属于相同的元素,则S2的最后一个事件在合并后的序列中是S1的最后一个元素的一部分;

2)若S2的最后两个事件属于不同的元素,则S2的最后一个事件在合并后的序列中成为连接到S1的尾部的单独元素

4.2 修剪阶段
与apriori算法一样:对于k-序列模式,只要存在一个(k-1)邻接子序列,则表面k-序列是不频繁的。

4.2.1 首先介绍两种技巧:

4.2.2 其次介绍在有时间限制后如何判断一个数据序列是否包含一个特定的序列
对事物数据库中的每个数据序列的每一项进行哈希,从而确定应该考察哈希树哪些叶子节点中的候选K序列;对于叶子节点中的每个候选K序列,须考察其是否包含在该数据序列中,对每个包含在该数据序列中的候选序列,其计数值加1。

如何考察数据序列d是否包含某个候选K序列s?分两步(使用“向前阶段”和“向后阶段”来判断是否包含)

1)论文中关于两个阶段的定义:

2)翻译过来就是

【1】注意d是数据库中的序列,s是候选序列,s将要被判断是否是频繁的。

【2】向前阶段:向前往后找,要是d中找不到s中的某个元素,则s不是d的子序列;找呀找呀,要是能够找到那就分情况呀。没有超过时间限制一切好说;如果超过来时间限制,则进入“向后阶段”。

【3】向后阶段:由于时间限制超过了Max-gap。故应该从新时间值后重新搜索。若找到了,则进入“向前阶段”。

3)举例来讲

4.3 加入分类
其实就是在序列中的项集后面填入一个类别。例如书籍的后面加上作者名字和书籍所属类别。

五.算法

六 源代码及数据集等总结

6.1数据说明一:
算法说明请见开源平台上面的http://www.philippe-fournier-viger.com/spmf/GSP.php

算法的输入数据集,输出结果等请见我的博客 https://blog.csdn.net/yezonghui/article/details/105556854

6.2 数据样例1
输入数据集:

最终结果

产生过程

6.3 数据样例2
输入数据集

最终结果

结果产生过程:

七. 参考文章

https://www.cnblogs.com/beaver-sea/p/4743167.html (序列模式)

https://www.cnblogs.com/liuqing910/p/8964863.html (文月煮刀GSP算法讲解)

论文:《Mining Sequential Patterns: Generalizations:Generalizations and Performance Improvements 》

http://www.philippe-fournier-viger.com/spmf/GSP.php (spmf平台)

https://blog.csdn.net/yezonghui/article/details/105556854 (自己的博客)

本文参考文章:https://blog.csdn.net/yezonghui/article/details/105887249?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170481742616800197078305%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=170481742616800197078305&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-105887249-null-null.142v99pc_search_result_base3&utm_term=%E5%BA%8F%E5%88%97%E6%8C%96%E6%8E%98GSP&spm=1018.2226.3001.4449

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMake入门教程【核心篇】设置和使用缓存变量

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 概述设置缓存变量使用缓存变量更改缓存变量完整代码示例实战使用技巧注意事项总结与分析

锂电池制造设备中分布式IO模块优势

在“碳达峰、碳中和”目标推动下&#xff0c;新能源汽车当下发展势头正盛&#xff0c;而纯电动车的核心部件则是&#xff1a;锂电池。动力型锂电池作为新能源汽车核心零部件&#xff0c;其发展与新能源汽车行业息息相关&#xff0c;迎来广阔的市场空间。 为何采用I/O模块&#…

Qt 不允许指针指向不完整的类类型 “QScrollBar“

错误原因1&#xff1a;没有将相应的头文件包含进来 解决方法&#xff1a;包含头文件 #include <QScrollBar>错误原因2&#xff1a;使用了不完整类型的指针 解释&#xff1a; 在C中&#xff0c;如果尝试使用一个不完整类型的指针&#xff0c;编译器会报错。例如&#xff…

Android 13 原生浏览器-默认关闭 JavaScript

介绍 客户觉得此功能比较耗费流量&#xff0c;于是想要默认关闭此功能&#xff0c;此功能的入口是在浏览器-设置-高级-启用 JavaScript。 修改 路径&#xff1a;Browser/res/xml-sw600dp/advanced_preferences.xml <CheckBoxPreferenceandroid:key"enable_javascript…

常见类型的yaml文件如何编写?--kind: Deployment

基本说明 Deployment 资源是 Kubernetes 重要的组成部分之一&#xff0c;通过指定 Deployment 中的 Pod 模板和副本数量&#xff0c;Kubernetes 可以自动地创建并管理一组具有相同配置的 Pod&#xff0c;这样即使某些 Pod 发生故障或需要升级&#xff0c;也可以轻松地进行控制…

Linux中快速搭建RocketMQ测试环境

必要的文件下载 为什么选择RocketMQ | RocketMQ x86_64位JDK下载0jdk/8u391-b13 rocketmq二进制包下载-rocketmq-all-5.1.4-bin-release.zip 编译好的直接可用的dashboard【rocketmq-dashboard-1.0.0.jar】请在文章顶部下载 dashboard配套的配置文件【application.propert…

AI真正的Killer App 仍然缺席

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

汇编和C语言转换

C语言和汇编语言之间有什么区别 C语言和汇编语言之间存在显著的区别,主要体现在以下几个方面: 抽象层次: 汇编语言:更接近硬件的低级语言,通常与特定的处理器或指令集紧密相关。它提供了对处理器指令的直接控制,允许程序员直接操作硬件资源,如寄存器、内存等。 C语言:…

Android 车联网——CarUxRestrictionsManagerService介绍(十六)

在前面文章中经常提到 UX Restrictions,这里我们就来分析一下 CarUxRestrictions 相对应的 Manager 和 Service。 一、简介 CarUxRestrictionsManagerService 是安卓汽车平台中的一个核心服务,旨在管理汽车交互体验时的用户体验限制。它允许车载应用程序根据许多方面的限制…

ECMAScript6历史-前端开发+ECMAScript+基础语法+入门教程

ECMAScript6详解 ECMAScript 历史 我们首先来看 ECMA 是什么。ECMA&#xff0c;读音类似“埃科妈”&#xff0c;是欧洲计算机制造商协会&#xff08;European Computer Manufacturers Association&#xff09;的简称&#xff0c;是一家国际性会员制度的信息和电信标准组织。19…

linux 网络驱动之net_device 结构介绍

net_device 结构处于网络驱动层的非常核心的位置并且值得完全的描述. 这个列表描述 了所有成员, 更多的是提供了一个参考而不是用来备忘. 本章剩下的部分简要地描述了每 个成员, 一旦它用在例子代码上, 因此你不需要不停地回看这一节. 全局信息 结构 net_device 的第一部分是…

AcWing 203. 同余方程(扩展欧几里得算法)

题目链接 203. 同余方程 - AcWing题库高质量的算法题库https://www.acwing.com/problem/content/205/ 来源 《算法竞赛进阶指南》, NOIP2012提高组 题解 本题中的同余方程可以转化为ax by 1的形式&#xff0c;利用扩展欧几里得算法可以求得特解为&#xff0c;则通解为。 代…

网站建设网络设计营销类网站模板

★安装环境要求★ 服务器&#xff1a;Linux / Apache / IIS PHP版本&#xff1a;5.4及5.4以上&#xff0c;完美支持php7.4 MYSQL版本&#xff1a;5.0以上 PS&#xff1a;php版本推荐5.6&#xff0c;mysql推荐使用5.7 ★模板安装步骤★ 1、请将源码包里面的所有文件和文件夹上…

【每日一题】删除子串后的字符串最小长度

文章目录 Tag题目来源解题思路方法一&#xff1a;栈 写在最后 Tag 【栈】【字符串】【2024-01-10】 题目来源 2696. 删除子串后的字符串最小长度 解题思路 方法一&#xff1a;栈 思路 按照题目要求需要移除字符串中的 “AB” 和 “CD” 子字符串&#xff0c;并且移除这两种…

Clean Code读后总结——前进者的基石

前言 作为一个程序员&#xff0c;再职业生涯中会写很多很多万行代码。感觉学习写代码的过程很像学习写作的过程&#xff0c;写大型软件就是在写一本长篇小说&#xff0c;那么如何定义好的代码&#xff0c;感觉就像是问说怎么写出好的文章。 那么什么是好的代码呢&#xff1f;对…

Helix QAC 2023.4 新版支持C++20语言,带来更多性能提升!

Helix QAC 2023.4 新增功能 Helix QAC 2023.4全面支持MISRA C:2023规则&#xff0c;涵盖100%的指南。此版本还加强了对C20语言的支持&#xff0c;改进了数据流分析性能&#xff0c;并在整个产品中增加了多项用户体验改进。 增强的C20支持 此版本新增了对以下语言特性的支持&a…

代码随想录算法训练营Day28|93.复原IP地址、78.子集、90.子集II

93.复原IP地址 题目链接&#xff1a;93.复原IP地址 文档链接&#xff1a;93.复原IP地址 视频链接&#xff1a;回溯算法如何分割字符串并判断是合法IP&#xff1f;| LeetCode&#xff1a;93.复原IP地址 C实现 class Solution { private:vector<string> result;bool isVal…

vscode设置python脚本运行参数

1 添加配置文件 点击到你要配置的python文件&#xff0c;然后右上角点击 运行 &#xff0c;再点击 添加配置 再点击 “Pyhton文件” 选项&#xff08;其实就是在选择 当前的python文件 进行配置&#xff09; 接着就生成了配置文件 lanunch.json 2 参数配置 再上面代码的基础上…

c++语言基础20-排队取奶茶(堆)

题目描述 假设有一家奶茶店&#xff0c;现在有一些人在排队等待取奶茶&#xff0c;同时也有人在取奶茶。 请你设计一个程序模拟这种情况下的奶茶队列管理。假设每个人取奶茶的时间非常短&#xff0c;可以忽略不计&#xff0c;只需要考虑队列中的操作。 队列操作说明&#xff1…

Guava:Cache强大的本地缓存框架

Guava Cache是一款非常优秀的本地缓存框架。 一、 经典配置 Guava Cache 的数据结构跟 JDK1.7 的 ConcurrentHashMap 类似&#xff0c;提供了基于时间、容量、引用三种回收策略&#xff0c;以及自动加载、访问统计等功能。 基本的配置 Testpublic void testLoadingCache() th…