推荐系统实践(三)----基于关联规则分析的推荐算法(Apriori)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/keyue123/article/details/86504122

  关联规则分析也是一种比较常见的推荐算法,主要是根据历史数据统计不同规则出现的关系,比如: X > Y X->Y ,表示 X X 事件发生后, Y Y 事件也会有一定概率发生。
  关联规则分析最著名的就是“啤酒-尿布”的经典案例,沃尔玛的超市管理人员通过数据发现,很多买尿布的人大概率事件会去购买啤酒。这是因为在美国很多妈妈在家带孩子,所以去超市买尿布的任务就交给了爸爸,而一般爸爸都会在买尿布的时候顺手买一罐啤酒喝,所以明明是不相关的两个东西就有了很大的关联。
  关联规则分析的最终目标就是要找出强关联规则。一般使用 A p r i o r i Apriori F P G r o w t h FP-Growth E c l a t Eclat 算法。这里我们主要分析一下 A p r i o r i Apriori

  • A p r i o r i Apriori 算法
       A p r i o r i Apriori 主要包含两个步骤:
    1. 首先找出数据集中所有的频繁项集,这些项集出现的频繁性要大于或等于最小支持度
    2. 根据频繁项集产生强关联规则,这些规则必须满足最小支持度和最小置信度

  假设存在规则 X > Y X->Y ,则称 X X 为前项, Y Y 为后项:
S u p p o r t ( X > Y ) = X Y Support(X - > Y) = \frac{{同时包含XY的数据数}}{数据总数}
C o n f ( X > Y ) = X Y X Conf(X - > Y) = \frac{{同时包含XY的数据数}}{包含X的数据数}

  • 实例分析
      假设用户会同时购买多个手机,我们就不管手机用途了,送人也好,买了摔也行,我们搜集了下面四个用户的购买记录:
uesr phone
A { M i x 3 , X R , m a t e 20 } \{Mix3, XR, mate20\}
B { M i x 3 , P 20 , n e x s } \{Mix3, P20, nexs\}
C { M i x 3 , P 20 , n e x s , m a t e 20 } \{Mix3, P20, nexs, mate20\}
D { P 20 , n e x s } \{P20, nexs\}

  假设我们的最小支持度为0.5,最小置信度为0.75。首先计算最少个数项集的支持度

phone Support
{ n e x s } \{nexs\} 0.75
{ P 20 } \{P20\} 0.75
{ M i x 3 } \{Mix3\} 0.75
{ m a t e 20 } \{mate20\} 0.5
{ X R } \{XR\} 0.25

  因为最小支持度为0.5,所以 { X R } \{XR\} 不符合,直接被剔除。将项集个数增加一位,如果拓展项集有子集 { X R } \{XR\} ,直接去掉。

phone Support
{ M i x 3 , m a t e 20 } \{Mix3, mate20\} 0.5
{ M i x 3 , P 20 } \{Mix3, P20\} 0.5
{ M i x 3 , n e x s } \{ Mix3, nexs\} 0.5
{ P 20 , n e x s } \{P20, nexs\} 0.75
{ P 20 , m a t e 20 } \{P20, mate20\} 0.25
{ n e x s , m a t e 20 } \{nexs, mate20\} 0.25

  根据最小支持度,再次剔除 { P 20 m a t e 20 } \{P20、mate20\} { n e x s m a t e 20 } \{nexs、mate20\} 这两个项集,继续拓展,同上面一样,拓展项集存在子集 { P 20 m a t e 20 } \{P20、mate20\} { n e x s m a t e 20 } \{nexs、mate20\} ,则此拓展项集直接去除。

phone Support
{ M i x 3 , P 20 , n e x s } \{Mix3, P20, nexs\} 0.5

  拓展到最后,项集已经无法继续拓展,这个时候最终的项集为 { M i x 3 , P 20 , n e x s } \{Mix3, P20, nexs\} , 子集为:
         { M i x 3 } \{Mix3\} , { n e x s } \{nexs\} , { P 20 } \{P20\} , { M i x 3 , n e x s } \{Mix3, nexs\} , { M i x 3 , P 20 } \{Mix3, P20\} , { n e x s , P 20 } \{nexs, P20\}
  逐次计算上述子集的支持度:

  上面选择拓展项大概可以分以下几个步骤:获取项集->剪枝->获取拓展项集,使用python实现如下:
C on f ( { M i x 3 } > { P 20 , n e x s } ) = 2 3 = 0.666666666 C{\text{on}}f(\{ Mix3\} - > \{ P20,nexs\} ) = \frac{2}{3} = 0.666666666
C on f ( { n e x s } > { P 20 , M i x 3 } ) = 2 3 = 0.666666666 C{\text{on}}f(\{ nexs\} - > \{ P20,Mix3\} ) = \frac{2}{3} = 0.666666666
C on f ( { P 20 } > { M i x 3 , n e x s } ) = 2 3 = 0.666666666 C{\text{on}}f(\{ P20\} - > \{ Mix3,nexs\} ) = \frac{2}{3} = 0.666666666
C on f ( { M i x 3 , n e x s } > { P 20 } ) = 2 2 = 1.0 C{\text{on}}f(\{ Mix3, nexs\} - > \{ P20\} ) = \frac{2}{2} = 1.0
C on f ( { M i x 3 , P 20 } > { n e x s } ) = 2 2 = 1.0 C{\text{on}}f(\{ Mix3, P20\} - > \{ nexs\} ) = \frac{2}{2} = 1.0
C on f ( { P 20 , n e x s } > { M i x 3 } ) = 2 3 = 0.666666666 C{\text{on}}f(\{ P20,nexs\} - > \{Mix3 \} ) = \frac{2}{3} = 0.666666666
  最小置信度为0.75,所以只有 { P 20 , n e x s } > { M i x 3 } \{ P20,nexs\} - > \{Mix3 \} { M i x 3 , P 20 } > { n e x s } \{ Mix3, P20\} - > \{ nexs\} 符合最强关联规则,即买过 { P 20 , n e x s } \{ P20,nexs\} 有很大可能买 M i x 3 Mix3 , 买过 { M i x 3 , P 20 } \{ Mix3, P20\} 有很大概率买 n e x s nexs

猜你喜欢

转载自blog.csdn.net/keyue123/article/details/86504122