关联分析算法Apriori 和 FP-Growth (Python实现)
2023-12-18 16:15:19
一.原理
关联是指当一件事发生时,另外一件事也随着发生。关联分析也称关联挖掘,就是在各种数据之间挖掘规律或者模式。在数据挖掘中,最经典的案例就是尿不湿与啤酒的故事,这就是典型的关联关系。
关联规则的挖掘算法主要包括Apriori算法和FP-Growth算法。
? Apriori算法是一种基于候选生成和剪枝的经典算法。它首先生成所有的单个项集作为候选集,然后通过计算支持度来剪枝得到频繁项集,最后根据频繁项集生成关联规则。
? FP-Growth算法是一种基于前缀树的高效算法。它通过构建频繁模式树(FP-Tree)来存储数据,并通过递归的方式来发现频繁项集和关联规则。
二.算法代码
1.Apriori 代码
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules
# 1. 数据预处理
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']]
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)
# 2. 构建FP-tree
frequent_itemsets = apriori(df, min_support=0.6, use_colnames=True)
# 3. 挖掘频繁模式
frequent_patterns = apriori(df, min_support=0.6, use_colnames=True, verbose=False)
# 4. 生成关联规则
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7)
# 5. 后处理
print(rules)
2.FP-growth算法代码
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import fp_growth
# 1. 数据预处理
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']]
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)
# 2. 挖掘频繁模式
frequent_patterns = fp_growth(df, min_support=0.6, use_colnames=True)
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7)
# 3. 后处理
print(rules)
文章来源:https://blog.csdn.net/qq_42393720/article/details/135063196
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!