机器学习算法系列
第一章 Python/Spark 分类模型-逻辑回归知识点详细总结
第二章 分类模型-决策树知识点详细总结
第三章 分类模型-随机森林知识点详细总结
第四章 分类模型-支持向量机SVM知识点详细总结
第五章 关联分析-apriori算法知识点详细总结
一、简介
关联分析又称关联挖掘:发现存在于大量数据集中的关联性或相关性,进行智能推荐。
经典例子:沃尔玛的啤酒与尿布的故事,通过对超市购物篮数据进行分析,即顾客放入购物篮中不同商品之间的关系来分析顾客的购物习惯,发现美国妇女们经常会叮嘱丈夫下班后为孩子买尿布,30%-40%的丈夫同时会顺便购买喜爱的啤酒,超市就把尿布和啤酒放在一起销售增加销售额。
二、概念解释
以菜篮子购物举例
- 项 和 项集:每个商品就是一个项,多个商品的集合就是项集。
- 关联规则:关联规则是形如 A → B 的表达式,A 称为前件,B 称为后件,该规则表示的意思是:某用户如果购买了商品 A,那么也会购买商品 B。
- 支持度(support):support(X->Y)=P(XY), 也就是项目X和项目Y同时出现的概率。衡量频繁项集的频繁共现度。
- 频繁项集:满足最小支持度阈值的项集。
- 置信度(confidence):cofidence(X—>Y)=P(Y|X)=P(XY)/P(X),表示在项目X发生情况下,项目Y发生的条件概率。 置信度是衡量关联规则是否具有可信度的指标,通常利用最小置信度(一般为0.5)过滤掉正确概率较低的关联规则。
- 强关联规则:满足置信度大于人为设定的阈值(最小置信度)的关联规则为强关联规则。
- 提升度(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项集的集合
- 用上一步迭代发现的频繁(k-1)项集,产生新的候选k项集
- 对候选项的支持度计数
- 计算候选项的支持度计数,删除支持度计数小于阈值的所有候选项集
- 当没有新的频繁项集产生时,算法结束。
四、寻找强关联规则步骤
- 设定最小支持度、最小置信度
- 根据最小支持度找出所有的频繁项集:Apriori 算法的思路是,先计算长度为 1 的项集的支持度,找出其中的频繁项集;再将长度为 1 的频繁项集进行排列组合,并计算长度为 2 的项集的支持度,找出其中的频繁项集,以此类推。
- 因为关联规则至少在两个数据之间才可能存在,所以选择长度大于1的项集。
- 根据最小置信度发现强关联规则。
五、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}')
|