Apriori算法及java实现Word下载.docx

上传人:b****1 文档编号:13159981 上传时间:2022-10-07 格式:DOCX 页数:11 大小:59.05KB
下载 相关 举报
Apriori算法及java实现Word下载.docx_第1页
第1页 / 共11页
Apriori算法及java实现Word下载.docx_第2页
第2页 / 共11页
Apriori算法及java实现Word下载.docx_第3页
第3页 / 共11页
Apriori算法及java实现Word下载.docx_第4页
第4页 / 共11页
Apriori算法及java实现Word下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

Apriori算法及java实现Word下载.docx

《Apriori算法及java实现Word下载.docx》由会员分享,可在线阅读,更多相关《Apriori算法及java实现Word下载.docx(11页珍藏版)》请在冰豆网上搜索。

Apriori算法及java实现Word下载.docx

li[2]<

……….<

li[k-1]。

将Lk-1与自身连接,如果(l1[1]=l2[1])&

&

(l1[2]=l2[2])&

……..&

(l1[k-2]=l2[k-2])&

(l1[k-1]<

l2[k-1]),那认为l1和l2是可连接。

连接l1和l2 

产生的结果是{l1[1],l1[2],……,l1[k-1],l2[k-1]}。

2) 

剪枝步

CK是LK的超集,也就是说,CK的成员可能是也可能不是频繁的。

通过扫描所有的事务(交易),确定CK中每个候选的计数,判断是否小于最小支持度计数,如果不是,则认为该候选是频繁的。

为了压缩Ck,可以利用Apriori性质:

任一频繁项集的所有非空子集也必须是频繁的,反之,如果某个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从CK中删除。

(Tip:

为什么要压缩CK呢?

因为实际情况下事务记录往往是保存在外存储上,比如数据库或者其他格式的文件上,在每次计算候选计数时都需要将候选与所有事务进行比对,众所周知,访问外存的效率往往都比较低,因此Apriori加入了所谓的剪枝步,事先对候选集进行过滤,以减少访问外存的次数。

Apriori算法实例

交易ID

商品ID列表

T100

I1,I2,I5

T200

I2,I4

T300

I2,I3

T400

I1,I2,I4

T500

I1,I3

T600

T700

T800

I1,I2,I3,I5

T900

I1,I2,I3

上图为某商场的交易记录,共有9个事务,利用Apriori算法寻找所有的频繁项集的过程如下:

详细介绍下候选3项集的集合C3的产生过程:

从连接步,首先C3={{I1,I2,I3},{I1,I2,I5},{I1,I3,I5},{I2,I3,I4},{I2,I3,I5},{I2,I4,I5}}(C3是由L2与自身连接产生)。

根据Apriori性质,频繁项集的所有子集也必须频繁的,可以确定有4个候选集{I1,I3,I5},{I2,I3,I4},{I2,I3,I5},{I2,I4,I5}}不可能时频繁的,因为它们存在子集不属于频繁集,因此将它们从C3中删除。

注意,由于Apriori算法使用逐层搜索技术,给定候选k项集后,只需检查它们的(k-1)个子集是否频繁。

3. 

Apriori伪代码

算法:

Apriori

输入:

D- 

事务数据库;

min_sup- 

最小支持度计数阈值

输出:

L-D中的频繁项集

方法:

L1=find_frequent_1-itemsets(D);

// 

找出所有频繁1项集

For(k=2;

Lk-1!

=null;

k++){

Ck=apriori_gen(Lk-1);

产生候选,并剪枝

Foreach 

事务tinD{// 

扫描D进行候选计数

Ct 

=subset(Ck,t);

得到t的子集

候选c 

属于 

Ct

c.count++;

}

Lk={c属于Ck 

|c.count>

=min_sup}

ReturnL=所有的频繁集;

Procedureapriori_gen(Lk-1:

frequent(k-1)-itemsets)

Foreach项集l1属于Lk-1

Foreach项集 

l2属于Lk-1

If((l1[1]=l2[1])&

……..

l2[k-1]))then{

c=l1连接l2 

//连接步:

产生候选

ifhas_infrequent_subset(c,Lk-1)then

deletec;

//剪枝步:

删除非频繁候选

elseaddctoCk;

ReturnCk;

Procedurehas_infrequent_sub(c:

candidatek-itemset;

Lk-1:

Foreach(k-1)-subsetsofc

Ifs不属于Lk-1 

then

Returntrue;

Returnfalse;

4. 

由频繁项集产生关联规则

Confidence(A->

B)=P(B|A)=support_count(AB)/support_count(A)

关联规则产生步骤如下:

对于每个频繁项集l,产生其所有非空真子集;

对于每个非空真子集s,如果support_count(l)/support_count(s)>

=min_conf,则输出 

s->

(l-s),其中,min_conf是最小置信度阈值。

例如,在上述例子中,针对频繁集{I1,I2,I5}。

可以产生哪些关联规则?

该频繁集的非空真子集有{I1,I2},{I1,I5},{I2,I5},{I1},{I2}和{I5},对应置信度如下:

I1&

I2->

I5 

confidence=2/4=50%

I5->

I2 

confidence=2/2=100%

I2&

I1 

I1->

confidence=2/6=33%

I2->

confidence=2/7=29%

I5->

如果min_conf=70%,则强规则有I1&

I2,I2&

I1,I5->

I2。

5. 

AprioriJava代码

packagecom.apriori;

importjava.util.ArrayList;

importjava.util.Collections;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importjava.util.Set;

publicclassApriori{

privatefinalstaticintSUPPORT=2;

支持度阈值

privatefinalstaticdoubleCONFIDENCE=0.7;

置信度阈值

privatefinalstaticStringITEM_SPLIT="

;

"

项之间的分隔符

privatefinalstaticStringCON="

->

privatefinalstaticList<

String>

transList=newArrayList<

();

//所有交易

static{//初始化交易记录

transList.add("

1;

2;

5;

);

4;

3;

publicMap<

String,Integer>

getFC(){

Map<

frequentCollectionMap=newHashMap<

//所有的频繁集

frequentCollectionMap.putAll(getItem1FC());

itemkFcMap=newHashMap<

itemkFcMap.putAll(getItem1FC());

while(itemkFcMap!

=null&

itemkFcMap.size()!

=0){

candidateCollection=getCandidateCollection(itemkFcMap);

Set<

ccKeySet=candidateCollection.keySet();

//对候选集项进行累加计数

for(Stringtrans:

transList){

for(Stringcandidate:

ccKeySet){

booleanflag=true;

// 

用来判断交易中是否出现该候选项,如果出现,计数加1

String[]candidateIte

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1