GSP算法实战




#统计组合出现次数
def cou_ls(LS):#LS为列表dic={}for i in LS:dic[i]=dic.get(i,0)+1return dic#删除支持度小于2的
def cut_m(item):#item为字典for k in list(item.keys()):if item[k]<2:del item[k]return itemimport pandas as pd
with open('gsp.csv')as f:dataset=pd.read_csv(f)LS=[]for i in range(dataset.shape[0]):#5行2列ls=[]ls=list(set(dataset['booknumber'][i].split(',')))#每行元素出现多次需要去重LS.extend(ls)m=cou_ls(LS)print('所有一项集:',m)#去掉支持度小于最小阀值2item_1=cut_m(m)print('L1:')print(item_1)

所有一项集: {‘b’: 5, ‘a’: 3, ‘c’: 4, ‘d’: 3, ‘g’: 1, ‘e’: 3, ‘f’: 2, ‘h’: 1}
L1:
{‘b’: 5, ‘a’: 3, ‘c’: 4, ‘d’: 3, ‘e’: 3, ‘f’: 2}

#将频繁一项组合,生成二项集
name=list(item_1.keys())#提取频繁一项
name_new=[i+j for i in name for j in name]#将频繁一项进行组合生成二项
LS=[]
for n in name:#print(n)for i in dataset['booknumber']:ls=[]i_c=i.split(',')#print(i_c)#将字符串转为列表if n in i_c:#找到以n[0]开头的位置in_dex=i_c.index(n) for m in range(in_dex+1,len(i_c)):#从此处开始遍历列表ls.append(n+i_c[m])#该列表可能出现的两两组合ls=list(set(ls))#去重#print("ls",ls)LS.extend(ls)
print('所有二项集:',LS)
item=cou_ls(LS)#统计组合出现次数
item_2=cut_m(item)#删除支持度小于2的
print('L2:')
print(item_2)

所有二项集: [‘ba’, ‘bc’, ‘be’, ‘bf’, ‘bb’, ‘bg’, ‘bc’, ‘bf’, ‘bb’, ‘ba’, ‘be’, ‘bd’, ‘bc’, ‘be’, ‘bd’, ‘bb’, ‘ba’, ‘bc’, ‘ad’, ‘aa’, ‘ac’, ‘ab’, ‘af’, ‘ah’, ‘aa’, ‘ab’, ‘aa’, ‘ac’, ‘ab’, ‘ad’, ‘ae’, ‘cc’, ‘ca’, ‘cb’, ‘cf’, ‘ce’, ‘cb’, ‘cg’, ‘ce’, ‘cd’, ‘ce’, ‘ca’, ‘cb’, ‘cd’, ‘dc’, ‘da’, ‘db’, ‘dc’, ‘db’, ‘dd’, ‘da’, ‘de’, ‘ef’, ‘eg’, ‘eb’, ‘ed’, ‘ec’, ‘ee’, ‘fc’, ‘fe’, ‘fb’, ‘ff’, ‘fg’, ‘fa’, ‘fb’, ‘ff’]
L2:{‘ba’: 3, ‘bc’: 4, ‘be’: 3, ‘bf’: 2, ‘bb’: 3, ‘bd’: 2, ‘ad’: 2, ‘aa’: 3, ‘ac’: 2, ‘ab’: 3, ‘ca’: 2, ‘cb’: 3, ‘ce’: 3, ‘cd’: 2, ‘dc’: 2, ‘da’: 2, ‘db’: 2, ‘fb’: 2, ‘ff’: 2}

#N项合并
def con_(dic,n):LS_2=[]lev_2=list(dic.keys())for i in range(len(lev_2)):lev_2_=lev_2.copy()lev_2_.pop(i)#去掉本身ls_2=[]for j in range(len(lev_2_)):if lev_2[i][-(n-1):]==lev_2_[j][0:(n-1)]:#合并,去掉相同部分ls_2.append(lev_2[i]+lev_2_[j][-1])#print('-',ls_2)LS_2.extend(ls_2)return LS_2
def two_union(Item,n):#传入上一级得到的频繁项和项数item=con_(Item,n)#所有组合项#三项ls_k=[]index_=0for i in dataset['booknumber']:#print("i",i)for k in item:#print("k",k)i_c=i.split(',')#print(i_c)#将字符串转为列表l=[j in i_c for j in k]#判断组合项中元素是否都在i_c中if all(l):#所有元素都在列表中ic_k=''for w in k:if i_c !=[]:for j in i_c:if j == w:ic_k=ic_k+jindex_=i_c.index(j)#当前找到的元素位置i_c=i_c[index_+1:]#遍历子序列寻找break #找到了就停止else:continue#没找到继续向后#print(m)#print('*',ic_k)if ic_k==k:ls_k.append(ic_k)m=cou_ls(ls_k)#所有项集item_=cut_m(m)#删除支持度小于2的print('所有{}项集:{}'.format(n+1,m))print('L{}:{}'.format(n+1,item_))return item_

item_3=two_union(item_2,2)
所有3项集:{'adc': 2, 'ada': 2, 'adb': 2, 'aca': 2, 'acb': 2, 'aba': 3, 'abc': 2, 'cba': 2, 'dca': 2, 'dcb': 2, 'dba': 2, 'dbc': 2, 'bcb': 2, 'bce': 3, 'bfb': 2, 'bff': 2, 'bbf': 2, 'fbf': 2, 'abb': 2, 'bcd': 2}
L3:{'adc': 2, 'ada': 2, 'adb': 2, 'aca': 2, 'acb': 2, 'aba': 3, 'abc': 2, 'cba': 2, 'dca': 2, 'dcb': 2, 'dba': 2, 'dbc': 2, 'bcb': 2, 'bce': 3, 'bfb': 2, 'bff': 2, 'bbf': 2, 'fbf': 2, 'abb': 2, 'bcd': 2}
所有4项集:{'adca': 2, 'adcb': 2, 'adba': 2, 'adbc': 2, 'acba': 2, 'dcba': 2, 'bfbf': 2}
L4:{'adca': 2, 'adcb': 2, 'adba': 2, 'adbc': 2, 'acba': 2, 'dcba': 2, 'bfbf': 2}
item_5=two_union(item_4,4)
所有5项集:{'adcba': 2}
L5:{'adcba': 2}
n=2
while len(item_2)>1:item_2=two_union(item_2,n)n=n+1
所有3项集:{'adc': 2, 'ada': 2, 'adb': 2, 'aca': 2, 'acb': 2, 'aba': 3, 'abc': 2, 'cba': 2, 'dca': 2, 'dcb': 2, 'dba': 2, 'dbc': 2, 'bcb': 2, 'bce': 3, 'bfb': 2, 'bff': 2, 'bbf': 2, 'fbf': 2, 'abb': 2, 'bcd': 2}
L3:{'adc': 2, 'ada': 2, 'adb': 2, 'aca': 2, 'acb': 2, 'aba': 3, 'abc': 2, 'cba': 2, 'dca': 2, 'dcb': 2, 'dba': 2, 'dbc': 2, 'bcb': 2, 'bce': 3, 'bfb': 2, 'bff': 2, 'bbf': 2, 'fbf': 2, 'abb': 2, 'bcd': 2}
所有4项集:{'adca': 2, 'adcb': 2, 'adba': 2, 'adbc': 2, 'acba': 2, 'dcba': 2, 'bfbf': 2}
L4:{'adca': 2, 'adcb': 2, 'adba': 2, 'adbc': 2, 'acba': 2, 'dcba': 2, 'bfbf': 2}
所有5项集:{'adcba': 2}
L5:{'adcba': 2}

整理课件不易,走过路过觉得课程内容不错,请帮忙点赞、收藏!Thanks♪(・ω・)ノ**

参考文献

(1)https://blog.csdn.net/dpengwang/article/details/96437216

(2)https://blog.csdn.net/weixin_30276935/article/details/99331932?utm_medium=distribute.pc_relevant.none-task-blog-title-7&spm=1001.2101.3001.4242

(3)https://blog.csdn.net/qq_36523839/article/details/82191677?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param

(4)https://blog.csdn.net/qq_43372138/article/details/89279586

(5)https://blog.csdn.net/qq1010885678/article/details/45230011?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase

序列模式挖掘——GSP算法实战相关推荐

  1. 数据挖掘-序列模式挖掘-prefixspan算法(样例)

    数据挖掘-序列模式挖掘-prefixspan算法(样例) ' 所有结果: 通俗来讲:可以以1-频繁项d为例,我们的思路讲解的很明白:这儿我们一般化我们的求解过程: 1)第一次扫描原始数据库,得到长度为 ...

  2. 数据挖掘-序列模式挖掘-PrefixSpan算法(ppt版本)

    PrefixSpan算法 通俗来讲:前缀prefix就是序列数据前面部分的子序列 后缀:对于某一个前缀,序列中除去前缀后面剩下的子序列就是我们的后缀. 投影数据库:假设alpha是序列数据库 S的一个 ...

  3. prefixspan java_PrefixSpan序列模式挖掘算法

    介绍 与GSP一样,PrefixSpan算法也是序列模式分析算法的一种,不过与前者不同的是PrefixSpan算法不产生任何的侯选集,在这点上可以说已经比GSP好很多了.PrefixSpan算法可以挖 ...

  4. 4种序列模式挖掘算法的比较分析

    http://fpcheng.blog.51cto.com/2549627/829527 算法简介 AprioriAll算法属于Apriori类算法,其基本思想为首先遍历序列数据库生成候选序列并利用A ...

  5. Python预测之美 数据分析与算法实战(一)

    Python预测之美 数据分析与算法实战 声明:本文旨在对这本书进行简单的整理,列出大致得内容框架,不做具体而又深入的分析.想要深入了解的小伙伴们,自行解决吧. 第一篇 预测入门 第二篇 预测算法 第 ...

  6. 序列模式挖掘、频繁项集与频繁序列

    GSP,Spade,FreeSpan,PrefixSpan都是频繁序列挖掘算法 关联规则挖掘的的目标是寻找达到某种程度联系的事物集合,再由其产生相关的关联规则.它并不考虑事物发生的先后顺序. 序列模式 ...

  7. python序列模式的关联算法_关联算法

    以下内容来自刘建平Pinard-博客园的学习笔记,总结如下: 1 Apriori算法原理总结 Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合 ...

  8. 关联分析(三)--GSP算法

    转自:http://www.cnblogs.com/liuqing910/p/8964863.html 关联规则--Apriori算法部分讨论的关联模式概念都强调同时出现关系,而忽略数据中的序列信息( ...

  9. 聚类分析在用户行为中的实例_序列模式挖掘在用户行为分析中的应用

    作者:闲鱼技术-楚丰 背景 在互联网产品中,用户行为分析,通常是指通过统计.分析用户在产品上的各种行为事件,挖掘.发现出有用的信息,为产品的设计,运营策略提供有意义的依据. 通常,用户行为分析包含以下 ...

最新文章

  1. Python3 异步编程之进程与线程-1
  2. Linux常用命令之rm
  3. lightgbm简易评分卡制作
  4. 使用BeetleX构建基础的SSL网络通讯
  5. JavaScript实现MVVM之我就是想监测一个普通对象的变化
  6. Effective C++读书摘要--Implementations二
  7. 瞎折腾-CentOS 7.4 编译4.16.2版kernel 并安装
  8. vmware esxi 4.0 上安装postfix,mailx发送邮件
  9. java项目开发经验总结
  10. Linux 下如何彻底卸载MySQL数据库
  11. 数据结构与算法——左程云07
  12. 硬件固件名称在软件测试中指什么,固态硬盘升级固件有什么用?固态硬盘怎么升级固件?...
  13. 红黑联盟十周年 汇编语言系列教程
  14. 单阶段目标检测算法YOLOv3
  15. pythonsqrt函数用法_C语言sqrt函数的实例用法讲解
  16. TapTap 发布开发者服务:降低开发者研运成本 聚焦创作优质内容
  17. 删除桌面上文件,提示此文件位置不在当前位置?
  18. [siggraph13]《命运》的实时渲染技术
  19. 应用MapX编程两例
  20. SpringCloud-3-Ribbon

热门文章

  1. ARM Linux驱动开发简介
  2. mysql 自然连接、内连接、外连接的区别
  3. AccessOleDBCommand,数据库打开后无法关闭
  4. 云里黑白第十八回——win10便笺打不开 空白 无响应 便签便利贴芭比Q了
  5. 全球科技公司2019年终市值排名:阿里成亚洲一哥;苹果等接洽运营商,或出资建美国第四张5G网;Intel新独显细节曝光……...
  6. MacOS添加打印机(隔空打印)
  7. linux tty 软件包,linux学习之安装ttylinux(世界最小的linux操作系统)(转载)
  8. [附源码]PHP计算机毕业设计会议室预约系统(程序+LW)
  9. angular的injector
  10. ParameterizedType及其方法详解