apriori算法的c实现
1. apriori算法
Apriori算法是第一个关联规则挖掘算法,也是最经典的算法。它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与剪枝(去掉那些没必要的中间结果)组成。
2. 数据挖掘中的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); // 产生候选,并剪枝
For each 事务t in D{ // 扫描D进行候选计数
Ct =subset(Ck,t); // 得到t的子集
For each 候选c 属于 Ct
c.count++;
}
Lk={c属于Ck | c.count>=min_sup}
}
Return L=所有的频繁集;
Procere apriori_gen(Lk-1:frequent(k-1)-itemsets)
For each项集l1属于Lk-1
For each项集 l2属于Lk-1
If((l1[1]=l2[1])&&( l1[2]=l2[2])&&……..
&& (l1[k-2]=l2[k-2])&&(l1[k-1]<l2[k-1])) then{
c=l1连接l2 //连接步:产生候选
if has_infrequent_subset(c,Lk-1) then
delete c; //剪枝步:删除非频繁候选
else add c to Ck;
}
Return Ck;
Procere has_infrequent_sub(c:candidate k-itemset; Lk-1:frequent(k-1)-itemsets)
For each(k-1)-subset s of c
If s不属于Lk-1 then
Return true;
Return false;
3. weka里Apriori关联规则挖掘,我希望得到的结论是与最后一列目标属性的关系,可是总是得到的都是前边条件属
weka里面的apriori算法,先生成所有的频繁项集,然后生成规则,根据最小支持度和置信度都满足的情况,选出强规则输出。
举个例子,比如有个长度为3的频繁项集ABC
那么你生成规则时候是:
A->BC
AB->C
AC->B
B->AC
BC->A
C->AB
然后分别对上述产生的规则计算置信度,如果不满足,就不输出
那么你所说的问题,很可能是因为你的最后一列在->右边时的规则不满足置信度。
所以没有那样的规则输出。
weka默认的最小支持度是0.1,最小置信度是0.9,你可以通过命令行进行调整,适当降低
置信度,可能就能看到你想要的规则了。
4. apriori算法 怎么处理连续值
Apriori算法流程
1. 扫描数据库,生成候选1项集和频繁1项集。
2. 从2项集开始循环,由频繁k-1项集生成频繁频繁k项集。
2.1 频繁k-1项集生成2项子集,这里的2项指的生成的子集中有两个k-1项集。使如有3个2项频繁集{a, b}{b, c}{c, f},则它所有的2项子集为{{a, b}{b, c}}{{a, b}{e, f}}{{b, c}{c, f}}
2.2 对由2.1生成的2项子集中的两个项集根据上面所述的定理 i 进行连接,生成k项集。
2.3 对k项集中的每个项集根据如上所述的定理 ii 进行计算,舍弃掉子集不是频繁项集即不在频繁k-1项集中的项集。
2.4 扫描数据库,计算2.3步中过滤后的k项集的支持度,舍弃掉支持度小于阈值的项集,生成频繁k项集。
3. 当当前生成的频繁k项集中只有一个项集时循环结束。