Apriori算法总结
使用场景:
关联分析,是一种挖掘数据集中关联关系的方法。比如 购物时,购买 尿不湿,和买啤酒的关联关系。购买粉底和眼霜 的关联关系等等。为了挖掘出一些,肉眼不易看出的 数据集之间的关系,并加以解读。统计数据集中出现某项数据的出现频率,来确定该行为的可信度。这是使用场景。
原理:
该算法会统计一阶项、二阶项,以此类推多阶项,在数据集中出现的频度。并通过支持度来设置阈值,低于阈值频度的将会被筛选掉。并计算出每个关联关系的置信度。置信度越高,说明关联关系越强。支持度越高,说明出现频率越高,越是可信的。
支持度和可信度。
1、一个项集的支持度(support)
表示同时购买X、Y的订单数占总订单数(研究关联规则的“长表”中的所有购买的产品的订单数)的比例。如果用P(X)表示购买X的订单比例,其他产品类推,那么
2、可信度或置信度(confidence)
表示购买X的订单中同时购买Y的比例,即同时购买X和Y的订单数占购买X的订单的比例。公式表达:
3、提升度
提升度反映了关联规则中的X重点内容与Y的相关性:提升度 >1 且越高表明正相关性越高;提升度 <1 且越低表明负相关性越高;提升度 =1 表明没有相关性。
算法流程:
Apriori算法伪代码:
Procedure apriori(D,min_sup)
L1 =find_frequent_1-itemsets(D); // 找出频繁 1 项集
for(k=2;Lk-1 !=null;k++)
{
Ck =apriori_gen(Lk-1 ); // 产生候选,并剪枝
// 扫描 D 进行候选计数
for each 事务t in D{
Ct =subset(Ck,t); // 得到 t 的子集
for each 候选 c 属于 Ct
c.count++;
Lk ={c 属于 Ck|c.count>=min_sup} //返回候选项集中不小于最小支持度的项集
}
return L= 所有的频繁集;
第一步:连接(join)
Procedure 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 // 连接步:产生候选
//若k-1项集中已经存在子集c则进行剪枝
if has_infrequent_subset(c,Lk-1 )
then delete c; // 剪枝步:删除非频繁候选
else add c to Ck;
}
return Ck;
第二步:剪枝(prune)
Procedure 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;
如需源码,请私信我。
参考资料1:https://blog.csdn.net/weixin_39220714/article/details/83595519
参考资料2:https://www.csdn.net/tags/MtTaEg5sOTQ5NjUtYmxvZwO0O0OO0O0O.html