12 数据挖掘技术之关联规则
在数据挖掘领域,关联规则
是揭示数据间潜在关系的重要方法。它通常用于找出不同变量之间的关系,广泛应用于市场篮子分析、推荐系统等场景。本篇文章将详细介绍关联规则的基本概念、常用算法、实际应用案例,以及如何使用 Python 实现简单的关联规则挖掘。
关联规则的基本概念
关联规则的形式可以表示为 ,其中 和 是项集。这个规则的意思是:如果在一个事务中出现了 ,那么在很多情况下也会出现 。主要有以下几个重要指标来衡量关联规则的有效性:
-
支持度 (Support):表示包含项集 的事务所占的比例,公式为:
-
置信度 (Confidence):表示在包含项集 的事务中,同时也包含项集 的比例,公式为:
-
提升度 (Lift):表示规则 的强度,与 和 的独立性关系有关,公式为:
关联规则算法
在数据挖掘中,最著名的关联规则挖掘算法是 Apriori 算法和 FP-Growth 算法。
Apriori 算法
Apriori
算法基于“先频繁后生成”的思想,借助支持度来发现频繁项集。其主要步骤如下:
- 生成候选项集:从单个项开始,计算所有项的支持度,找到频繁项集。
- 剪枝:利用频繁项集的特性,删去不可能成为频繁项集的项集。
- 迭代:不断重复上述过程,直到无法生成新的频繁项集为止。
FP-Growth 算法
与 Apriori 算法不同,FP-Growth
算法不生成候选项集,而是构建一个 FP-tree
(Frequent Pattern Tree),直接从中挖掘频繁项集。其步骤如下:
- 构建 FP-tree:扫描数据库,统计每个项的频次,构建树结构。
- 挖掘频繁项集:从
FP-tree
中递归地挖掘频繁项集,利用条件模式基生成局部频繁项集。
案例分析:市场篮子分析
下面我们通过一个市场篮子分析的案例来具体演示如何利用 Python
进行关联规则挖掘。
假设有以下交易数据:
Transaction ID | Items |
---|---|
1 | Milk, Bread |
2 | Milk, Diaper, Beer |
3 | Bread, Diaper |
4 | Milk, Bread, Diaper |
5 | Bread, Diaper |
我们将使用 mlxtend
库中的 apriori
和 association_rules
函数来实现关联规则挖掘。
代码示例
首先,安装 mlxtend
库(如果尚未安装):
pip install mlxtend
接下来,使用以下代码进行关联规则挖掘:
import pandas as pd
from mlxtend.frequent_patterns import apriori, association_rules
# 创建事务数据
data = [['Milk', 'Bread'],
['Milk', 'Diaper', 'Beer'],
['Bread', 'Diaper'],
['Milk', 'Bread', 'Diaper'],
['Bread', 'Diaper']]
# 转换为 DataFrame 格式
df = pd.DataFrame(data, columns=['Items'])
# 将事务数据转换为一个热编码格式(One-Hot Encoding)
from mlxtend.preprocessing import TransactionEncoder
encoder = TransactionEncoder()
onehot = encoder.fit(data).transform(data)
onehot_df = pd.DataFrame(onehot, columns=encoder.columns_)
# 计算频繁项集
frequent_itemsets = apriori(onehot_df, min_support=0.4, use_colnames=True)
# 生成关联规则
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.5)
# 输出结果
print(rules)
结果解析
输出的关联规则将显示不同项之间的关系,比如如果购买了 Milk
,则购买 Bread
的概率为 Confidence
的值。我们可以由此判断哪些商品的组合是值得推荐的。
总结
通过本篇文章,我们详细介绍了数据挖掘技术中的 关联规则
,了解了其基本概念、常用算法及应用案例。采用 Apriori
和 FP-Growth
算法,我们可以有效地发现数据中的有趣关系,下一篇我们将讨论模型评估与选择中的各种评估指标,帮助我们更好地理解算法的效果。
希望本系列教程能帮助数据挖掘小白们掌握相关知识,欢迎在后续学习中继续跟随我们的内容!