(python)A算法找出数据集中满足条件的关联规则。

目录

1.数据集

2.Apriori算法原理

3.实现步骤

3.1A算法函数

3.2获取频繁项集函数

3.3候选集函数

3.4扫描候选集函数

3.5主函数

4.运行结果

 5.全部代码


1.数据集

[[1, 2, 5], [2, 4], [2, 3], [1,2,4],[1,3],[2,3],[1,3],[1,2,3,5],[1,2,3]]

可自行定义为所需的数据集。

执行程序后,找到具有关联的商品,并且输出其对应的结果:

2.Apriori算法原理

Apriori算法是经典的挖掘频繁项集和关联规则的数据挖掘算法。Apriori算法使用一种称为逐层搜索的迭代方法,其中k项集用于探索(k+1)项集。为了提高频繁项集逐层产生的效率,Apriori算法使用频繁项集的先验性质来压缩搜索空间。先验性质为:

频繁项集的所有非空子集也一定是频繁的。非频繁项集的所有超集一定也是非频繁项集。

3.实现步骤

3.1A算法函数,其最小置信度为0.2

def A(dataset, min_support = 2):
    c1 = item (dataset)
    f1, sup_1 = get_f_i(dataset, c1, min_support)
    F = [f1]
    sup_data = sup_1
    K = 2
    while (len(F[K - 2]) > 1):
        ck = get_c(F[K - 2], K)
        fk, sup_k = get_f_i(dataset, ck, min_support)
        F.append(fk)
        sup_data.update(sup_k)
        K += 1
    return F, sup_data

使用item函数扫描候选集,再使用get_f_i函数获取频繁项集,通过一系列的获取候选集和频繁项集以此来实现A算法。

3.2获取频繁项集函数

def get_f_i(dataset, c, min_support): #获取频繁项集
    cut_branch = {}
    for x in c:
        for y in dataset:
            if set(x).issubset(set(y)):
                cut_branch[tuple(x)] = cut_branch.get(tuple(x), 0) + 1
    Fk = []
    sup_dataK = {}
    for i in cut_branch:
        if cut_branch[i] >= min_support:
            Fk.append( list(i))
            sup_dataK[i] = cut_branch[i]
    return Fk, sup_dataK

3.3候选集函数

def get_c(Fk, K):
    ck = []
    for i in range(len(Fk)):
        for j in range(i+1, len(Fk)):
            L1 = list(Fk[i])[:K-2]
            L2 = list(Fk[j])[:K-2]
            L1.sort()
            L2.sort()
            if L1 == L2:
                if K > 2:
                    new = list(set(Fk[i]) ^ set(Fk[j]))
                else:
                    new = set()
            for x in Fk:
                if set(new).issubset(set(x)) and list(set(Fk[i]) | set(Fk[j])) not in ck:
                    ck.append(list(set(Fk[i]) | set(Fk[j])))
    return ck

3.4扫描候选集函数

def item(dataset):
    c1 = []
    for x in dataset:
        for y in x:
            if [y] not in c1:
                c1.append( [y] )
    c1.sort()
    return c1

3.5主函数

if __name__ == '__main__':
    data = [[1, 2, 5], [2, 4], [2, 3], [1,2,4],[1,3],[2,3],[1,3],[1,2,3,5],[1,2,3]]
    K,Z= A(data,min_support = 2)   #最小支持度设置为2
    print("具有关联的商品是:")
    for i in range(len(K)):人工智能
        print(K[i])

4.运行结果,如下图所示:

 5.全部代码

def A(dataset, min_support = 2):
    c1 = item (dataset)
    f1, sup_1 = get_f_i(dataset, c1, min_support)
    F = [f1]
    sup_data = sup_1
    K = 2
    while (len(F[K - 2]) > 1):
        ck = get_c(F[K - 2], K)
        fk, sup_k = get_f_i(dataset, ck, min_support)
        F.append(fk)
        sup_data.update(sup_k)
        K += 1
    return F, sup_data
def get_f_i(dataset, c, min_support): #获取频繁项集
    cut_branch = {}
    for x in c:
        for y in dataset:
            if set(x).issubset(set(y)):
                cut_branch[tuple(x)] = cut_branch.get(tuple(x), 0) + 1
    Fk = []
    sup_dataK = {}
    for i in cut_branch:
        if cut_branch[i] >= min_support:
            Fk.append( list(i))
            sup_dataK[i] = cut_branch[i]
    return Fk, sup_dataK
def get_c(Fk, K):
    ck = []
    for i in range(len(Fk)):
        for j in range(i+1, len(Fk)):
            L1 = list(Fk[i])[:K-2]
            L2 = list(Fk[j])[:K-2]
            L1.sort()
            L2.sort()
            if L1 == L2:
                if K > 2:
                    new = list(set(Fk[i]) ^ set(Fk[j]))
                else:
                    new = set()
            for x in Fk:
                if set(new).issubset(set(x)) and list(set(Fk[i]) | set(Fk[j])) not in ck:
                    ck.append(list(set(Fk[i]) | set(Fk[j])))
    return ck
def item(dataset):
    c1 = []
    for x in dataset:
        for y in x:
            if [y] not in c1:
                c1.append( [y] )
    c1.sort()
    return c1
if __name__ == '__main__':
    data = [[1, 2, 5], [2, 4], [2, 3], [1,2,4],[1,3],[2,3],[1,3],[1,2,3,5],[1,2,3]]
    K,Z= A(data,min_support = 2)   #最小支持度设置为2
    print("具有关联的商品是:")
    for i in range(len(K)):
        print(K[i])

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关联规则算法是一种常见的数据挖掘算法,它可以用于分析数据集的频繁项集和关联规则Python有很多库可以用来实现关联规则算法,比如Apriori算法、FP-Growth算法等。 下面我们以Apriori算法为例,演示如何使用Python实现关联规则算法。 首先,我们需要安装apyori库,它是一个用于实现Apriori算法Python库。可以使用以下命令进行安装: ```python !pip install apyori ``` 接下来,我们可以使用一个数据集,来演示如何使用Apriori算法。这个数据集包含了一些顾客购买商品的交易记录,我们可以通过分析这些交易记录来找出频繁项集和关联规则。 ```python import pandas as pd # 读取数据集 data = pd.read_csv('transactions.csv', header=None) # 将数据集转换为list格式 transactions = [] for i in range(len(data)): transactions.append([str(data.values[i,j]) for j in range(len(data.columns))]) ``` 接下来,我们可以使用apyori库来实现关联规则算法。通过设置参数可以调整算法的最小支持度和最小置信度等阈值。 ```python from apyori import apriori # 设置算法参数 min_support = 0.1 min_confidence = 0.5 min_lift = 1.0 # 应用 Apriori 算法 results = list(apriori(transactions, min_support=min_support, min_confidence=min_confidence, min_lift=min_lift)) # 输出结果 for result in results: print(result) ``` 运行以上代码后,我们可以得到频繁项集和关联规则的结果。其,每个结果包含了频繁项集或者关联规则的支持度、置信度和提升度等信息。 最后,我们可以将结果保存到文件,方便后续分析和可视化。 ```python # 将结果保存到文件 output_file = open('output.txt', 'w') for result in results: output_file.write(str(result)+'\n') output_file.close() ``` 以上就是一个简单的关联规则算法实现的示例,可以根据实际应用场景进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值