当前位置: 首页 > news >正文

【数据挖掘】Apriori算法

Apriori算法是经典的关联规则挖掘算法,用于从事务型数据库中发现频繁项集和强关联规则,特别常用于购物篮分析等场景。


🧠 核心思想(Apriori原则)

一个项集是频繁的,前提是它的所有子集也必须是频繁的。
即:“若某项集不频繁,它的超集也一定不频繁”

这个原则用于大大减少候选项集的数量,提高挖掘效率。


🚶 Apriori算法执行步骤

下面是算法流程(以最小支持度为前提):

① 扫描数据库,找出所有频繁1项集(L1)

  • 统计每个单个商品出现的次数

  • 丢掉那些支持度小于最小阈值的项

② 生成候选2项集(C2),计算频繁2项集(L2)

  • 将L1中的元素两两组合成C2

  • 扫描数据库计算这些组合的支持度

  • 保留满足最小支持度的组合,得到L2

③ 使用 L2 构造 C3,找出 L3……

  • 重复步骤直到没有更多频繁项集为止

④ 基于频繁项集生成关联规则

  • 从每个频繁项集中拆分出可能的规则A⇒B

  • 计算这些规则的置信度和提升度

  • 筛选满足置信度和提升度阈值的规则


✅ 示例(简化版)

事务如下:

事务ID商品列表
T1牛奶, 面包
T2牛奶, 尿布, 啤酒
T3面包, 尿布, 可乐
T4牛奶, 面包, 尿布
T5面包, 啤酒

最小支持度设为 0.4(2次出现)

  1. L1:频繁1项集:{牛奶}, {面包}, {尿布}, {啤酒} ✅({可乐}只出现1次,删除)

  2. C2(候选2项集):组合上面频繁1项集,比如 {牛奶, 面包}, {尿布, 啤酒} 等

  3. L2:选出支持度 ≥0.4 的组合,如 {牛奶, 面包}, {尿布, 啤酒}(若满足)

  4. L3:组合L2项集再继续下去……

  5. 对频繁项集,如 {牛奶, 尿布} 生成关联规则:

    • 例如 牛奶 ⇒ 尿布,计算置信度 = 支持(牛奶和尿布) / 支持(牛奶)


📦 应用场景

  • 零售行业的购物篮分析

  • 推荐系统(推荐某个商品时同时推荐相关联商品)

  • 医疗诊断中发现药物组合

  • Web日志分析(用户点击路径)


好的!下面是使用 Python 和 mlxtend 库来实现 Apriori 算法的完整示例。这个库简洁高效,适合教学和实践。


✅ 步骤一:安装依赖(如尚未安装)

pip install mlxtend

✅ 步骤二:准备事务数据

我们使用“啤酒与尿布”的经典示例:

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder# 示例数据
dataset = [['牛奶', '面包'],['牛奶', '尿布', '啤酒'],['面包', '尿布', '可乐'],['牛奶', '面包', '尿布'],['面包', '啤酒']
]# 转换为0/1编码的DataFrame
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)
print(df)

输出:

     啤酒    可乐     尿布     牛奶    面包
0  False  False  False   True   True
1   True  False   True   True  False
2  False   True   True  False   True
3  False  False   True   True   True
4   True  False  False  False   True

✅ 步骤三:使用 Apriori 算法找出频繁项集

from mlxtend.frequent_patterns import apriori# 设定最小支持度为0.4(即至少2次)
frequent_itemsets = apriori(df, min_support=0.4, use_colnames=True)
print(frequent_itemsets)

输出示例:

   support     itemsets
0      0.6       {面包}
1      0.6       {尿布}
2      0.6       {牛奶}
3      0.4       {啤酒}
4      0.4     {牛奶, 面包}
5      0.4     {牛奶, 尿布}
6      0.4     {尿布, 面包}

✅ 步骤四:生成关联规则

from mlxtend.frequent_patterns import association_rules# 使用置信度最小值筛选规则
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.6)
print(rules[['antecedents', 'consequents', 'support', 'confidence', 'lift']])

输出示例:

  antecedents consequents  support  confidence  lift
0      {牛奶}       {面包}     0.4        0.67   1.11
1      {面包}       {牛奶}     0.4        0.67   1.11
2      {牛奶}       {尿布}     0.4        0.67   1.11

✅ 总结

  • 频繁项集 通过 apriori() 计算,保留支持度高的组合;

  • 关联规则 通过 association_rules() 生成,评估置信度、提升度等;

  • 可调整 min_supportmin_threshold 控制挖掘深度。


http://www.xdnf.cn/news/298027.html

相关文章:

  • 【愚公系列】《Manus极简入门》021-音乐创作助手:“音符魔术师”
  • 数学复习笔记 3
  • 【Part 2安卓原生360°VR播放器开发实战】第三节|实现VR视频播放与时间轴同步控制
  • iOS开发架构——MVC、MVP和MVVM对比
  • 如何开始使用 Blender:Blender 3D 初学者指南和简介 怎么下载格式模型
  • java springboot deepseek流式对话集成示例
  • UE5 材质淡入淡出
  • 【数据结构】求有向图强连通分量的方法
  • 【开发工具】Window安装WSL及配置Vscode获得Linux开发环境
  • 虚拟现实视频播放器 2.6.1 | 支持多种VR格式,提供沉浸式观看体验的媒体播放器
  • Spark,HDFS客户端操作
  • mysql中select 1 from的作用
  • 博客系统测试报告
  • 在命令行终端中快速打开npm包官网
  • MySQL从入门到精通(二):Windows和Mac版本MySQL安装教程
  • 【STM32项目实战】一文了解单片机的SPI驱动外设功能
  • (十)深入了解AVFoundation-采集:录制视频功能的实现
  • HTTP 与 HTTPS 的深度剖析:差异、原理与应用场景
  • Day17 聚类算法(K-Means、DBSCAN、层次聚类)
  • MacOS+VSCODE 安装esp-adf详细流程
  • Three.js和WebGL区别、应用建议
  • 【奔跑吧!Linux 内核(第二版)】第1章:Linux 系统基础知识
  • 【测试开发】概念篇 - 从理解需求到认识常见开发、测试模型
  • 第二节:Vben Admin 最新 v5.0 对接后端登录接口(上)
  • 用OMS从MySQL迁移到OceanBase,字符集utf8与utf8mb4的差异
  • 如何保障服务器租用中的数据安全?
  • 基于 Trae 的单细胞 RNA 测序分析与可视化
  • Linux下的好玩的命令
  • Linux:进程间通信---命名管道共享内存
  • Android组件化 -> Debug模式下,本地构建module模块的AAR和APK