1、知识点介绍
明确几个概念:
事务、项、项集合
X==>Y
**支持度:**一个项集或者规则在所有事务中出现的频率,σ(X):表示项集X的支持度计数
**置信度:**确定Y在包含X的事务中出现的频繁程度。c(X → Y) = σ(X∪Y)/σ(X)
举个例子:
(X , Y)==>Z :
支持度:交易中包含{X 、 Y 、 Z}的可能性
置信度:包含{X 、 Y}的交易中也包含Z的条件概率
若关联规则X->Y的支持度和置信度分别大于或等于用户指定的最小支持率minsupport和最小置信度minconfidence,则称关联规则X->Y为强关联规则,否则称关联规则X->Y为弱关联规则。
**提升度:**物品集A的出现对物品集B的出现概率发生了多大的变化
lift(A==>B)=confidence(A==>B)/support(B)=p(B|A)/p(B)
由此可见,lift正是弥补了confidence的这一缺陷,if lift=1,X与Y独立,X对Y出现的可能性没有提升作用,其值越大(lift>1),则表明X对Y的提升程度越大,也表明关联性越强。
Leverage 与 Conviction的作用和lift类似,都是值越大代表越关联
Leverage 😛(A,B)-P(A)P(B)
Conviction:P(A)P(!B)/P(A,!B)
2、代码方面知识
1)使用mlxtend工具包得出频繁项集与规则
pip install mlxtend
2)设置支持度 (support) 来选择频繁项集.
选择最小支持度为50%
apriori(df, min_support=0.5, use_colnames=True)
3)计算规则
association_rules(df, metric=‘lift’, min_threshold=1)
可以指定不同的衡量标准与最小阈值
设置显示的最大行数
pd.options.display.max_colwidth = 100
显示所有列
pd.set_option(‘display.max_columns’, None)
pd.set_option(‘display.max_columns’, 5) #最多显示五列
显示所有行
pd.set_option(‘display.max_rows’, None)
5)分割字符串并返回各个字符的复杂矩阵
Series.str.get_dummies(sep=’|’)
参数:
sep : 字符串, 默认为“|”
返回值:
数据框(DataFrame)
3、实验
实验一:
import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
data = {
'ID': [1, 2, 3, 4, 5, 6],
'Onion': [1, 0, 0, 1, 1, 1],
'Potato': [1, 1, 0, 1, 1, 1],
'Burger': [1, 1, 0, 0, 1, 1],
'Milk':