数据挖掘十大经典算法之Apriori算法

Apriori算法是1994年由R.Agrawal和R.Srikant提出的关联规则挖掘算法,用于寻找频繁项集。算法采用逐层搜索的方式,从1项集开始,通过计算支持度生成频繁项集。其主要缺点包括多次扫描数据库和可能产生庞大的候选集。改进方法包括基于散列、事务压缩、数据划分和采样等。Apriori算法在宠物商店案例中展示了如何发现商品关联性。
摘要由CSDN通过智能技术生成

数据挖掘十大经典算法之Apriori算法

概述

Apriori是关联规则模型中的经典算法,是由R.Agrawal和R.Srikant于1994年提出的为布尔关联规则挖掘频繁项集的原创性算法。Apriori使用一种称作逐层搜索的迭代方法,k项集用于搜索k+1项集。该算法主要用于在交易数据、关联数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联性或因果结构。

重要概念

  • N项集
    表示由N个元素组成的元素集合(N为大于0的整数)
  • N项集的支持度
    表示在所有样本中,能够匹配特定N项集要求的样本数量,它也可以表示成百分比的形式。
  • 频繁N项集(L[n])
    表示满足指定的最小支持度的所有N项集
  • 候选N项集(C[n])
    它由频繁N-1项集L[n-1]生成,是计算频繁N项集的基础。C[n]必须保证包括所有的频繁N项集。

重要性质

频繁项集的所有非空子集也必须是频繁的。即如果项集A不满足最小支持度阈值MinSupport,则A不是频繁的,如果将项集B添加到项集A中,也就是A B也不可能是频繁的。该性质是一种反单调性的性质,也就是说如果一个集合不能通过测试,则它的所有超集也都不能通过相同的测试。

基本实现原理

  1. 首先寻找L[1](即频繁1项集);
  2. 在L[k]的基础上生成候选频繁k+1项集C[k+1];
  3. 用事务数据库D中的事务对所有C[k+1]进行支持度测试以寻找频繁项集L[k+1],计算每个候选频繁项集的支持度,如果大于最小支持度,则加入到L[k+1];
  4. 如果L[k+1]为空集,则结束,L[1] ∪ L[2] ∪ …即为结果;否则转2继续。

伪代码形式

Apriori算法
输入:数据集D;最小支持度minsupport
输出:频繁项集L
L[1] = {频繁1项集}//初始化频繁项集L[1](也称单品项集)
for(k=2;L[k-1]不为空;k++){
    C[k] = candidate_gen(L[k-1]);//根据L[k-1]产生新的候选频繁项集C[k]
    For all transactions t ϵ D; {//对所有的交易记录做循环
        C = subset(C[k],t);//找出当前交易记录t和候选频繁项集C[k]的交集
        For all candidates c ϵC do//对存在的候选频繁项集的交集进行支持度计数
        c.count ++;
    }
    L[k] = {c ϵ C[k] | c.count >= minsup};//保留大于最小支持度的频繁项集到L[k];
}
Answer = L=∪L[k]=L[1] ∪ L[2] ∪ ... ∪ L[k]

candidate_gen(L[k-1])
输入:(k-1)-项集
输出:k-候选集C[k]
for all itemset p ∈ L[k-1]
    for all itemset q ∈ L[k-1]
        if(p.item1 = q.item1,p.item2=q.item2,...,p.item(k-2)=q.item(k-2),p.item(k-1)<q.item(k-1))
            c=p∞q;
        if(has_infrequent_subset(c,L[k-1]) delete c;
        else add c to C[k];
    End for
End for
return C[k];

has_infrequent_subset(c,L[k-1])
输入:一个k-项集c,(k-1)-项集L[k-1]
输出:c是否从候选集中删除
for all (k-1)-subsets of c
    if S ∉ L[k-1]
        return true;
return false;

Apriori算法的缺点

  • 多次扫描事务数据库,需要很大的I/O负载。

    对每次k循环,候选集C[k]中的每个元素都必须通过扫描数据库一次来验证其是否加入L[k]。加入一个频繁大项集包含10个项,那么就至少需要扫描事务数据库10次。

  • 可能产生庞大的候选集。

    由L[k-1]产生k-候选集C[k]是指数增长的,例如 10

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值