python--数据挖掘中GSP算法

一、DSP算法与Apriori的不同

GSP算方法跟Apriori算法很类似
唯一的不同就是频繁项的选择
Apriori算法:https://blog.csdn.net/qq_43372138/article/details/89279586
Apriori算法频繁项集的选择是无序的
例如:
A=(a,b),B=(b,a)
A,B是两个频繁项集
在Apriori中,A,B是同一个频繁项集
在DSP算法中,A,B是不同的频繁项集

二、DSP算法思想

DSP还是跟Apriori一样先找出含一个元素的频繁项集
然后就不同了
DSP用一个元素的频繁项集进行两辆组合形成规则L2候选序列S2
然后找出S2的频繁项集(这里找频繁项是看候选序列的相对位置,不一定要全部挨在一起)
这时候要生成L3的候选序列该肿么办呢?
例如:
A=(a,b,v)和B=(b,v,d)两个频繁项集
如果A除了第一个元素‘a’,B除了最后一个元素‘d’,A,B其他元素都一样
那么可以生成L3的候选序列S3(a,b,v,d)
然后不停的找L4,L5,L6。。。的候选序列直到找不出来为止

三、实例

数据:
在这里插入图片描述
代码:


import re
import pandas as pd
from collections import defaultdict as de
def dell(d,na):
    for i in na:
        del d[i]
    return d
    
def gps_de(d,n):
    name=[]
    for k,v in d.items():
        if v<n:
            name.append(k)
    return dell(d,name)

def gps_cr(d):
    name=[]
    for k,v in d.items():
        name.append(k)
    name_new=[i+j[-1] for i in name for j in name if i[1:]==j[:-1]]
    return name_new

def gps_crdi(name,dataset):
    r=de(int)
    for i in name:
        b=''
        for j in range(len(i)-1):
            b+=i[j]+'.*'
        b+=i[-1]
        for i in dataset['booknumber'].values:
            i_new=i.replace(',','')
            res=re.search(b,i_new)
            if not(res==None):
                r[b.replace('.*','')]+=1
    return r
    
with open('C:\\Users\\F.S.Z\\Desktop\\gsp.csv')as f:
    dataset=pd.read_csv(f)
    r_1=[]
    r_1_di=de(int)
    for i in dataset['booknumber'].values:
        for j in set(i.split(',')):
            r_1_di[j[0]]+=1
    di=gps_de(r_1_di,2)
    print('L1:')
    print(di)
    name=[]
    for k,v in di.items():
        name.append(k)
    name_new=[i+j for i in name for j in name]
    r_di=gps_crdi(name_new,dataset)
    di_3=gps_de(r_di,2)
    nuu=1
    while(len(di_3)!=0):
        print('L'+str(nuu+1)+':')
        print(di_3)
        name_n=gps_cr(di_3)
        r_di=gps_crdi(name_n,dataset)
        di_3=gps_de(r_di,2)
        nuu+=1

结果:
在这里插入图片描述
a,b。。。是按时间买书名
这样我们就可以按照规则L5有序的进行推荐

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值