1. 关联规则挖掘
关联规则挖掘定义
大多数关联规则挖掘算法通常采用的一种策略是,将关联规则挖掘任务分解为如下两个主要的子任务:
- 频繁项集产生(Frequent Itemset Generation)
其目标是发现满足最小支持度阈值的所有项集,这些项集称作频繁项集。 - 规则的产生(Rule Generation)
其目标是从上一步发现的频繁项集中提取所有高置信度的规则,这些规则称作强规则。 - 关联分析的目标
- 发现频繁项集;
- 由频繁项集产生强关联规则,这些规则必须大于或等于最小支持度和最小置信度。
2 Apriori算法介绍
- Apriori算法的原理
- 通过限制候选产生发现频发项集
- 由频繁项集产生关联规则
- Apriori算法的重要性质
- 性质1:频繁项集的子集必为频繁项集
如果{B,C}是频繁的,那么{B},{C}也一定是频繁的 - 性质2:非频繁项集的超集一定是非频繁的。
如果{A, B}是非频繁的,那么{A, B, C},{A, B, C, D}也一定是频繁的
- 性质1:频繁项集的子集必为频繁项集
- 使用Apriori算法发现频繁项集
- 扫描数据集,得到所有出现过的数据,作为候选1项集
- 挖掘频繁k项集
扫描计算候选k项集的支持度
剪枝去掉候选k项集中支持度低于最小支持度α的数据集,得到频繁k项集。如果频繁k项集为空,则返回频繁k-1项集的集合作为算法结果,算法结束。
基于频繁k项集,连接生成候选k+1项集 - 利用步骤2,迭代得到k=k+1项集结果
- **由频繁项集产生关联规则 **
产生关规则的过程如下:- 对于每个频繁项集I,产生I的所有非空子集
- 对于I的每个非空子集s,如果support(l)/support(s) ≥min_conf,则输出规则“s⇒(l-s)”。其中,min_conf是最小置信度阈值。
- Apriori算法的简单实例
- Apriori算法举例——发现频发项集
- Apriori算法举例——产生关联规则
对于频繁项集{B, C, E}, 它的非空子集有{B}, {C}, {E}, {B, C}, {B,E}, {C,E}.以下是据此获得的关联规则及其置信度
- Apriori算法举例——发现频发项集
2.1 代码实现
# *-* coding:utf-8 *-*
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
data_test = [['A', 'C', 'D'], ['B', 'C', 'E'], ['A', 'B', 'C', 'E'], ['B', 'E']]
def create_data():
dataset = [['Milk', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
['Dill', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
['Milk', 'Apple', 'Kidney Beans', 'Eggs'],
['Milk', 'Unicorn', 'Corn', 'Kidney Beans', 'Yogurt'],
['Corn', 'Onion', 'Onion', 'Kidney Beans', 'Ice cream', 'Eggs']]
return dataset
def main():
dataset = create_data()
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)
frequent_itemsets = apriori(df, min_support=0.7, use_colnames=True)
print(frequent_itemsets) # 频繁项集
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7) # 关联规则
print(rules)
if __name__ == '__main__':
main()
n_threshold=0.7) # 关联规则
print(rules)
if __name__ == '__main__':
main()