栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

第五章 关联分析——apriori算法知识点详细总结

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第五章 关联分析——apriori算法知识点详细总结

关联分析算法介绍及代码实现 一、简介

关联分析又称关联挖掘:发现存在于大量数据集中的关联性或相关性,进行智能推荐。

经典例子:沃尔玛的啤酒与尿布的故事,通过对超市购物篮数据进行分析,即顾客放入购物篮中不同商品之间的关系来分析顾客的购物习惯,发现美国妇女们经常会叮嘱丈夫下班后为孩子买尿布,30%-40%的丈夫同时会顺便购买喜爱的啤酒,超市就把尿布和啤酒放在一起销售增加销售额。

二、概念解释

以菜篮子购物举例

  1. 项 和 项集:每个商品就是一个项,多个商品的集合就是项集。
  2. 关联规则:关联规则是形如 A → B 的表达式,A 称为前件,B 称为后件,该规则表示的意思是:某用户如果购买了商品 A,那么也会购买商品 B。
  3. 支持度(support):support(X->Y)=P(XY), 也就是项目X和项目Y同时出现的概率。衡量频繁项集的频繁共现度。
  4. 频繁项集:满足最小支持度阈值的项集。
  5. 置信度(confidence):cofidence(X—>Y)=P(Y|X)=P(XY)/P(X),表示在项目X发生情况下,项目Y发生的条件概率。 置信度是衡量关联规则是否具有可信度的指标,通常利用最小置信度(一般为0.5)过滤掉正确概率较低的关联规则。
  6. 强关联规则:满足置信度大于人为设定的阈值(最小置信度)的关联规则为强关联规则。
  7. 提升度(lift):Lift(X—>Y)=P(Y|X)/P(Y)=P(XY)/(P(X)P(Y)), 用于比较置信度与结果项目Y单独发生时两者概率间的大小。

lift(A->B)=c(A->)/s(B) ,
提升度反映了项目A的出现对项目B出现的影响程度。其实是一种相关性度量的方法。

- 如果lift(A,B)<1,则说明A的出现和B的出现是负相关的;
- 如果lift(A,B)>1,则A和B是正相关的,意味A的出现对B的出现有促进作用;
- 如果lift(A,B)=1,则说明A和B是独立的,没有相关性。

具有实用性的关联规则应该是提升度大于1的规则。

三、频繁项集原理
  1. 算法初始通过单遍扫描数据集,确定每个项的支持度,得到所有频繁1项集的集合
  2. 用上一步迭代发现的频繁(k-1)项集,产生新的候选k项集
  3. 对候选项的支持度计数
  4. 计算候选项的支持度计数,删除支持度计数小于阈值的所有候选项集
  5. 当没有新的频繁项集产生时,算法结束。

https://blog.csdn.net/DWNMD/article/details/106035302

四、寻找强关联规则步骤
  1. 设定最小支持度、最小置信度
  2. 根据最小支持度找出所有的频繁项集:Apriori 算法的思路是,先计算长度为 1 的项集的支持度,找出其中的频繁项集;再将长度为 1 的频繁项集进行排列组合,并计算长度为 2 的项集的支持度,找出其中的频繁项集,以此类推。
  3. 因为关联规则至少在两个数据之间才可能存在,所以选择长度大于1的项集。
  4. 根据最小置信度发现强关联规则。
五、python apriori参数解释
参数名中文解释值
transactions事务集合值为嵌套列表或Series
min_support最小支持度阈值float,默认值为0.1
min_confidence最小置信度阈值float,默认为0.0
min_lift最小提升度float,默认为0.0
max_length序列最小长度int
六、python代码
# 使用apyori库
from apyori import apriori

# 事务库
transactions = [['A', 'B', 'C'], ['A', 'B'], ['B', 'C'], ['A', 'B', 'C', 'D'], ['B', 'C', 'D']]

# 计算强关联规则
rules = apriori(transactions, min_support=0.4, min_confidence=0.8)
results = list(rules)

# 规则展示
for i in results:
    for j in i.ordered_statistics:
        X = j.items_base  # 前件
        Y = j.items_add  # 后件
        x = ','.join([item for item in X])
        y = ','.join([item for item in Y])
        if x != '':
            print(f'{x}→{y}')
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971466.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号