Apriori算法例题

Apriori算法

表1

TIDItermset
1A,B,C,D
2B,C,E
3A,B,C,E
4B,D,E
5A,B,C,D

最小支持度为40%,最小信任度为60%

1.求最大频繁项目集

首先找出频繁项目集L1,然后找出频繁项目集L2,直到不能再扩展频繁项目集的元素数目而算法停止。

最小支持数为40%*5(5是TID个数)=2

  • L1生成

    LC(表1中L出现的次数)
    A3
    B5
    C4
    D3
    E3

    挑出支持数(表2中C)>=2的项目集组成频繁项目集L1={A,B,C,D,E}

  • L2生成

    L1排列组合生成表3的L列

    LC
    AB3
    AC3
    AD2
    AE1
    BC4
    BD3
    BE3
    CD2
    CE2
    DE1

    挑出支持数(表3中C)>=2的项目集组成频繁项目集L2={AB,AC,AD,BC,BD,BE,CD,CE}

  • L3生成

    补充排列组合技巧

    前提:对项目集排序

    在前1到n个字母相同的情况下,最后一个字母不同的可以进行合并

    例如AB与AC合并成ABC,ABD与ABC合并成ABCD,ABC与ACD则不能合并

    L2排列组合生成表4的L列

    LC
    ABC3

    ABD

    2
    ACD2
    BCD2
    BCE2
    BDE1
    CDE0

    挑出支持数(表4中C)>=2的项目集组成频繁项目集L3={ABC,ABD,ACD,BCD,BCE}

  • L4生成 由L3排列组合生成表5的L列

LC
ABCD2
BCDE0

挑出支持数(表5中C)>=2的项目集组成频繁项目集L4={ABCD}

  • L5生成

由L4生成5-候选表C5=∅,L5=∅,算法停止

则所有频繁项目集为{A,B,C,D,E,AB,AC,AD,BC,BD,BE,CD,CE,ABC,ABD,ACD,BCD,BCE,ABCD}

补充超集

超集:若一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1 就是S2 的一个超集。S1是S2的超集,则S2 是S1的真子集,反之亦然。

最大项目集:最大频繁项集是各频繁k项集中符合无超集条件的频繁项集。

比如:

{A}的超集为{AB,AC,AD,AE,ABC,ABD,ABE,ACD,ACE,ABCD,ABCDE}

{ABC}的超集为{ABCD,ABCDE}

所以最大频繁项目集为{ABCD,BCE}

2.求强关联

自信度大于等于最小信任度为60%为强关联

求各自信度:条件=>结果,自信度=结果在表1出现的次数/条件在表1出现的次数

比如下表,序号1,ABC=>ABCD,自信度=ABCD在表1出现的次数/ABC在表1出现的次数=2/3=67%

序号结果条件自信度是否为强关联
1ABCDABC67%
2ABCDAB67%
3ABCDA67%
4ABCDB40%
5ABCDAC67%
6ABCDC50%
7ABCDBC50%
8ABCDABD100%
9ABCDAD100%
10ABCDD67%
11ABCDBD67%
12ABCDACD100%
13ABCDCD100%
14ABCDBCD100%
15BCEBC50%
16BCEB40%
17BCEC50%
18BCEBE67%
19BCEE67%
20BCECE100%
以下是一个简单的Python实现Apriori算法的例子,用于查找频繁项集: ```python def load_dataset(): return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]] def create_candidates(dataset): candidates = [] for transaction in dataset: for item in transaction: if not [item] in candidates: candidates.append([item]) candidates.sort() return list(map(frozenset, candidates)) def scan_dataset(dataset, candidates, min_support): support_counts = {} for transaction in dataset: for candidate in candidates: if candidate.issubset(transaction): if not candidate in support_counts: support_counts[candidate] = 1 else: support_counts[candidate] += 1 num_items = float(len(dataset)) frequent_items = [] support_data = {} for itemset in support_counts: support = support_counts[itemset] / num_items if support >= min_support: frequent_items.append(itemset) support_data[itemset] = support return frequent_items, support_data def join_sets(itemset, length): return set([i.union(j) for i in itemset for j in itemset if len(i.union(j)) == length]) def apriori(dataset, min_support=0.5): candidates = create_candidates(dataset) frequent_items, support_data = scan_dataset(dataset, candidates, min_support) frequent_itemsets = [frequent_items] k = 2 while len(frequent_itemsets[k-2]) > 0: candidate_sets = join_sets(frequent_itemsets[k-2], k) frequent_items_k, support_data_k = scan_dataset(dataset, candidate_sets, min_support) support_data.update(support_data_k) frequent_itemsets.append(frequent_items_k) k += 1 return frequent_itemsets, support_data dataset = load_dataset() frequent_itemsets, support_data = apriori(dataset, min_support=0.5) print("Frequent Itemsets:\n", frequent_itemsets) print("Support Data:\n", support_data) ``` 输出结果如下: ``` Frequent Itemsets: [[frozenset({1}), frozenset({2}), frozenset({3}), frozenset({5})], [frozenset({1, 3}), frozenset({2, 3}), frozenset({3, 5}), frozenset({2, 5}), frozenset({1, 2}), frozenset({2, 3, 5})], [frozenset({2, 3, 5})]] Support Data: {frozenset({1}): 0.5, frozenset({3}): 0.75, frozenset({2}): 0.75, frozenset({5}): 0.75, frozenset({1, 3}): 0.25, frozenset({2, 3}): 0.5, frozenset({3, 5}): 0.5, frozenset({2, 5}): 0.5, frozenset({1, 2}): 0.25, frozenset({2, 3, 5}): 0.25} ``` 其中,`load_dataset()`函数用于加载数据集,`create_candidates()`函数用于创建候选项集,`scan_dataset()`函数用于计算每个项集的支持度,`join_sets()`函数用于将k-1项集结合成k项集,`apriori()`函数用于执行Apriori算法。在这个例子中,数据集为一个列表,其中每个元素都表示一笔交易,算法会输出所有频繁项集及其支持度。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值