1、关联规则概念
如果去超市买东西,我们会发现购买了牛奶的客户很可能会去购买面包,那么“牛奶=>面包”就称之为关联规则,其中牛奶是前项,面包是后项,它们都是项集(单项集)。
2、关联规则算法Apriori
Apriori是最常用也是最经典的挖掘频繁项集的算法,其核心思想是通过连接产生候选项及其支持度,然后通过剪枝生成频繁项集。
(1)项集
项集是项的集合,包含k个项的就是k项集,如{牛奶,面包}就是一个2项集。
(2)项集的支持度计数
项集A的支持度计数就是事务集中包含项集A的事务的个数,用Support_count(A)表示。事务集包含的所有事务个数用Total_count(事务集)表示。
(3)支持度和置信度
A、B为项集,A=>B为关联规则。
项集的支持度:
关联规则的支持度:
(相当于Support(A U B),A U B也是一个项集。也就是说关联规则的支持度等于由关联规则的前项和后项组成的项集的支持度)
关联规则的置信度:
(4)最小支持度和最小置信度
最小支持度是用户或专家定义的衡量支持度的一个阈值,表示项集的最低重要性。
最小置信度是用户或专家定义的衡量置信度的一个阈值,表示关联规则的最低可靠性。
满足最小支持度的项集称作频繁项集。
同时满足最小支持度和最小置信度的关联规则称作强规则。
(5)算法流程
餐厅的订单信息如下:
菜品{18491,8842,8693,7794,8705}分别用{a, b, c, d, e}表示
过程一:找最大的频繁k项集集合
(假定最小支持度为0.2,最小置信度为0.5)
- 扫面所有事务,事务中发生的每一项都是候选1项集的集合C1中的成员,C1={ {a},{b},{c},{d},{e}}
- 计算C1中的每一个候选1项集的支持度,保留大于或者等于最小支持度的项集得到频繁1项集集合L1={
{a},{b},{c},{d},{e}}。
- 连接L1和L1得到候选2项集集合C2={ {a, b},{a,c},{a,d},{a,e},{b,c},{b,d},{b,e},{c,d},{c,e},{d,e}},接下来是剪枝,由于C2的每一项的子集都是频繁项集,所以C2不用剔除任何项。
- 计算C2中的每一个候选2项集的支持度,保留大于或者等于最小支持度的项集得到频繁2项集集合L2={
{a, b},{a,c},{a,e},{b,c},{b,d},{c,e}}。
- 连接L2和L1得到候选3项集集合C3={ {a,b,c},{a,b,d},{a,b,e},{a,c,d},{a,c,e},{a,e,d},{b,c,d},{b,c,e},{b,d,e},{c,e,d}}。接下来进行剪枝处理,对于C3中的每一项,如果它的子集不是频繁项集,则剔除该