推荐系统——关联规则(2019-09-22)
关联规则算法首先由Agrawal和Swami提出,最早的成型为经典的Apriori算法。它的基本思想是:使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集。首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做L1,然后利用L1找频繁2项集的集合L2,L2找L3,如此下去,直到不能再找到任何频繁k项集。最后再在所有的频繁集中找出强规则,即产生用户感兴趣的关联规则。
关于这个算法有一个非常有名的故事:"尿布和啤酒":美国的妇女们经常会嘱咐她们的丈夫下班后为孩子买尿布,而丈夫在买完尿布后又要顺手买回自己爱喝的啤酒,因此啤酒和尿布在一起被购买的机会很多。这个举措使尿布和啤酒的销量双双增加,并一直为众商家所津津乐道。
概念介绍:
支持度:S(Support) 事物包含A B = P(x),表示事件x出现的概率;
置信度:C(Confidence) 在A发生的事件中同时发生B的概率 P(AB)/P(A) = P(B|A);
频繁项集 :(Frequent Itemset)支持度大于等于特定的最小支持度(Minimum Support/minsup)的项集。表示为L k。
连接步:L(k-1) 与其自身进行连接,产生候选项集 C(k) 。 L(k-1) 中某个元素与其中另一个元素可以执行连接操作的前提是它们中有(k-2) 个项是相同的。也就是只有一个项是不同的。如:项集 {I1,I2} 与 {I1,I5} 连接之后产生的项集是 {I1,I2,I5} ,而项集 {I1,I2} 与 {I3,I4}不能进行连接操作。
剪枝步:C k是L k的超集,也就是说,C k的成员可能是也可能不是频繁的。通过扫描所有的事务(交易),确定C k中每个候选的计数,判断是否小于最小支持度计数,如果不是,则认为该候选是频繁的。为了压缩C k,可以利用Apriori性质:任一频繁项集的所有非空子集也必须是频繁的,反之,如果某个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从C k中删除。
下面我们通过一个例子来解释: