机器学习 —— 关联规则
摘要:关联规则挖掘是机器学习中用于发现数据集中项目间关联关系的技术,主要应用于购物篮分析等领域。该方法通过支持度和置信度指标衡量规则强度,其中支持度反映规则普遍性,置信度表示规则可靠性。使用Python的mlxtend库可实现关联规则挖掘,包括数据编码、Apriori算法查找频繁项集和生成关联规则等步骤。该技术可应用于医疗、金融等多个领域,帮助从大型数据集中提取有价值的模式。核心概念包括前件、后件、频繁项集等,Apriori算法是其经典实现方法之一。
目录
机器学习 —— 关联规则
示例
输出结果
频繁项集输出:
关联规则输出:
术语说明
机器学习 —— 关联规则
关联规则挖掘(Association Rule Mining)是机器学习中的一种技术,用于从大型数据集中发现有价值的模式。这些模式以关联规则的形式呈现,代表数据集中不同项目或属性之间的关联关系。关联规则挖掘最常见的应用场景是购物篮分析(Market Basket Analysis),其目的是识别出经常被一起购买的商品。
关联规则由前件(antecedents)集合和后件(consequents)集合组成。前件代表规则适用所需满足的条件或存在的项目,后件则代表与前件相关联的结果或可能出现的项目。关联规则的强度通过两个指标衡量:支持度(support)和置信度(confidence)。支持度是数据集中同时包含前件和后件的交易占比;置信度是在包含前件的交易中,同时包含后件的交易占比。
示例
在 Python 中,mlxtend库提供了多个用于关联规则挖掘的函数。以下是使用mlxtend中的apriori函数实现关联规则挖掘的示例代码:
# 导入所需库
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules
# 创建样本数据集(购物交易记录)
data = [
['牛奶', '面包', '黄油'],
['牛奶', '面包'],
['牛奶', '黄油'],
['面包', '黄油'],
['牛奶', '面包', '黄油', '奶酪'],
['牛奶', '奶酪']
]
# 对数据集进行编码
te = TransactionEncoder()
te_ary = te.fit(data).transform(data) # 拟合并转换数据
df = pd.DataFrame(te_ary, columns=te.columns_) # 构建编码后的DataFrame
# 使用Apriori算法查找频繁项集
frequent_itemsets = apriori(df, min_support=0.5, use_colnames=True)
# 生成关联规则(以置信度为指标,最小阈值设为0.5)
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.5)
# 输出结果
print("频繁项集:")
print(frequent_itemsets)
print("
关联规则:")
print(rules)
在上述示例中,我们首先创建了一个购物交易样本数据集,然后通过mlxtend的TransactionEncoder对数据进行编码处理。接着使用apriori函数查找最小支持度为 0.5 的频繁项集(Frequent Itemsets),最后通过association_rules函数生成最小置信度为 0.5 的关联规则。
apriori函数接收两个核心参数:编码后的数据集和最小支持度阈值。use_colnames参数设为True时,将使用原始项目名称(如 “牛奶”“面包”)作为列名,而非布尔值(True/False)。association_rules函数接收三个关键参数:频繁项集、评估指标(本示例使用置信度)和最小阈值(本示例设为 0.5)。
输出结果
上述代码的输出将包含频繁项集和生成的关联规则。频繁项集代表数据集中经常同时出现的项目组合,关联规则则代表频繁项集中各项目之间的关联关系。
频繁项集输出:
| support | itemsets |
|---|---|
| 0.666667 | (面包) |
| 0.666667 | (黄油) |
| 0.833333 | (牛奶) |
| 0.500000 | (面包,黄油) |
| 0.500000 | (面包,牛奶) |
| 0.500000 | (黄油,牛奶) |
关联规则输出:
| antecedents | consequents | antecedent support | consequent support | support | confidence | lift | leverage | conviction | zhangs_metric |
|---|---|---|---|---|---|---|---|---|---|
| (面包) | (黄油) | 0.666667 | 0.666667 | 0.5 | 0.75 | 1.125 | 0.055556 | 1.333333 | 0.333333 |
| (黄油) | (面包) | 0.666667 | 0.666667 | 0.5 | 0.75 | 1.125 | 0.055556 | 1.333333 | 0.333333 |
| (面包) | (牛奶) | 0.666667 | 0.833333 | 0.5 | 0.75 | 0.900 | -0.055556 | 0.666667 | -0.250000 |
| (牛奶) | (面包) | 0.833333 | 0.666667 | 0.5 | 0.60 | 0.900 | -0.055556 | 0.833333 | -0.400000 |
| (黄油) | (牛奶) | 0.666667 | 0.833333 | 0.5 | 0.75 | 0.900 | -0.055556 | 0.666667 | -0.250000 |
| (牛奶) | (黄油) | 0.833333 | 0.666667 | 0.5 | 0.60 | 0.900 | -0.055556 | 0.833333 | -0.400000 |
关联规则挖掘是一种功能强大的技术,可应用于多种类型的数据集。除了常用于购物篮分析以识别共同购买的商品外,它还能应用于医疗保健、金融、社交媒体等多个领域。借助mlxtend等 Python 库,我们可以轻松实现关联规则挖掘,并从大型数据集中提取有价值的洞察。
术语说明
- 关联规则(Association Rule):描述数据集中项目之间关联关系的规则,形式为 “前件→后件”。
- 前件(Antecedent):规则的前提条件,即触发规则的项目集合(如 “购买面包”)。
- 后件(Consequent):规则的结果,即与前件相关联的项目集合(如 “购买黄油”)。
- 支持度(Support):数据集中同时包含前件和后件的交易比例,反映规则的普遍程度。
- 置信度(Confidence):包含前件的交易中同时包含后件的比例,反映规则的可靠程度。
- 频繁项集(Frequent Itemset):支持度达到或超过最小支持度阈值的项目组合。
- Apriori 算法:关联规则挖掘中用于查找频繁项集的经典算法,核心思想是 “频繁项集的子集必为频繁项集”。










