本文代码及数据集来自《Python大数据分析与机器学习商业案例实战》

  • 步骤1:设定最小支持度和最小置信度
    首先设定最小支持度为2/5,即40%;最小置信度为4/5,即80%。
  • 步骤2:根据最小支持度找出所有的频繁项集
    这一步骤是关联分析中较为重要的一个环节,我们需要找到所有的频繁项集,因为强关联规则都是从频繁项集中产生的。
    举例来说,项集{A,B,C,D}只出现了1次,支持度为1/5,小于最小支持度2/5,该项集就不是频繁项集,这就意味着很难从该项集中挖掘出类似{A,B,C}→{D}的强关联规则,即类似“购买了商品A、B、C的用户也会购买商品D”这样的规则。而项集{B,C}出现了4次,支持度为4/5,大于最小支持度2/5,该项集就属于频繁项集,即商品B和商品C经常同时出现,因此很有可能挖掘出{B}→{C}这样的强关联规则(当然还需要经过步骤3的最小置信度检验),即购买了商品B的用户也会购买商品C,这样就可以向购买了商品B的用户推荐商品C。
    那么该如何快速找到所有的频繁项集呢?最简单的方法就是列出所有项集,然后计算它们的支持度,如果大于等于最小支持度则认定为频繁项集。但是列出所有项集意味着要列出所有的排列组合,如果数据量较大,则会造成巨大的计算量。
    Apriori算法采用了一个精巧的思路来加快运算速度:先计算长度为1的项集,然后挖掘其中的频繁项集;再将长度为1的频繁项集进行排列组合,从中挖掘长度为2的频繁项集,依此类推。其核心逻辑是一个迭代判断的思想:如果连长度为n-1的项集都不是频繁项集,那么就不用考虑长度为n的项集了,也就是说,如果在迭代的过程中发现{A,B,C}不是频繁项集,那么{A,B,C,D}必然不是频繁项集,也就不用去考虑它了。
  • 步骤3:根据最小置信度发现强关联规则
    找到所有长度大于1的频繁项集后,强关联规则就很有可能就从这些频繁项集中产生,此时最后一个步骤就是从各个频繁项集中推导出所有可能的关联规则,再利用最小置信度来检验这些关联规则是否为强关联规则。
    举例来说,频繁项集{A,B,C}的非空子集有{A}、{B}、{C}、{A,B}、{A,C}、{B,C},由此可以推导出6条关联规则。

    从上表可知,只有规则2满足最小置信度要求,所以得到一条强关联规则{A,C}→{B}。对每个长度大于1的频繁项集进行类似操作,可推导出所有强关联规则,见下表。

    至此,我们便得到了9条强关联规则。以第1条强关联规则{A,C}→{B}为例,我们便可以向购买了商品A和商品C的用户推荐商品B,其余依此类推。
# 数据读取与预处理
import pandas as pd
df = pd.read_excel('中医辨证.xlsx')
print(df.head())symptoms = []
for i in df['病人症状'].tolist(): # 转换为双重列表结构symptoms.append(i.split(','))
print(symptoms)

运行结果:

# 法一:apyori库
from apyori import apriori
rules = apriori(symptoms, min_support=0.1, min_confidence=0.7)
results = list(rules)for i in results: # 遍历每一个频繁项集for j in i.ordered_statistics: # 获取频繁项集的关联规则X = j.items_base # 关联规则的前件Y = j.items_add # 关联规则的后件x = ', '.join([item for item in X]) # 连接前件中的元素y = ', '.join([item for item in Y]) # 连接后件中的元素if x != '': # 防止关联规则前件为空print(x + ' → ' + y)

运行结果:

# 法二:mlxtend库
from mlxtend.preprocessing import TransactionEncoder
TE = TransactionEncoder()
data = TE.fit_transform(symptoms) # 将原始数据转换为布尔值import pandas as pd
df = pd.DataFrame(data, columns=TE.columns_)
print(df.head())

运行结果:

from mlxtend.frequent_patterns import apriori
items = apriori(df, min_support=0.1, use_colnames=True)
print(items)# 查看长度大于等于2的频繁项集
print(items[items['itemsets'].apply(lambda x: len(x)) >= 2])

运行结果:

# 根据最小置信度在频繁项集中挖掘强关联规则
from mlxtend.frequent_patterns import association_rules
rules = association_rules(items, min_threshold=0.7)
print(rules)

运行结果:

for i, j in rules.iterrows():X = j['antecedents']Y = j['consequents']x = ', '.join([item for item in X])y = ', '.join([item for item in Y])print(x + ' → ' + y)

运行结果:

关联分析:Apriori算法相关推荐

  1. 关联分析(Apriori算法) 面包 牛奶 尿布 啤酒 ...

    关联分析时,需要处理两个关键问题 1 大量数据集中发现模式,计算代价高 2 某些模式可能是虚假的,因为他们是偶然发生的 关联分析例题:从这个商品记录得出顾客喜欢同时购买那几样东西 TID 面包 牛奶 ...

  2. 数据挖掘之关联分析Apriori算法

    文章目录 一.理论知识 1.1.定义 1.2.关联规则 1.3.频繁项集的产生 二.python实战 一.理论知识 许多商业企业在运营中积累了大量的数据.例如:普通超市的收银台每天都会收集到大量的用户 ...

  3. 关联分析——Apriori算法

    Apriori 算法详解 当我们在百度搜索里输入一个单词或单词一部分的时候,搜索引擎会自动补全查询词项,比如:输入"机器",百度下拉词项中就会出现"机器人编程" ...

  4. 【机器学习】关联分析Apriori算法详解以及代码实现

    Apriori算法以及统计学基础 什么是关联分析 简单的统计学基础 Apriori输出频繁集 从频繁项集中挖掘关联规则 什么是关联分析 从大规模数据集中寻找物品间的隐含关系被称作关联分析.而寻找物品的 ...

  5. 44 R关联分析——Apriori算法

    install.packages("gridBase") install.packages("arules") install.packages("a ...

  6. 挖掘频繁模式、关联和Apriori算法

    挖掘频繁模式.关联和Apriori算法 1. 引入 1.1 基本概念 频繁模式:频繁出现在数据集中的模式 频繁模式挖掘:获取到给定数据集中反复出现的联系 注:模式其实可以理解为,你在淘宝购物,你的购物 ...

  7. apriori算法_挖掘频繁模式、关联和Apriori算法

    挖掘频繁模式.关联和Apriori算法 1. 引入 1.1 基本概念 频繁模式:频繁出现在数据集中的模式 频繁模式挖掘:获取到给定数据集中反复出现的联系 注:模式其实可以理解为,你在淘宝购物,你的购物 ...

  8. 关联分析Apriori算法和FP-growth算法初探

    1. 关联分析是什么? Apriori和FP-growth算法是一种关联算法,属于无监督算法的一种,它们可以自动从数据中挖掘出潜在的关联关系.例如经典的啤酒与尿布的故事.下面我们用一个例子来切入本文对 ...

  9. 机器学习-关联之Apriori算法原理及实战

    Apriori算法 前言 关联分析是一种无监督的机器学习方法,主要用于发现大规模数据集中事物之间的依存性和关联性.挖掘数据中隐藏的有价值的关系(如频繁项集.关联规则),有利于对相关事物进行预测,也能帮 ...

  10. Python 在线电子零售公司销售数据(Online Retail | Kaggle)关联规则分析(Apriori算法)

    引言: 本文使用python语言完成了在线电子零售公司的跨国交易数据集的数据分析与可视化.根据关联规则原理设计实现了基于Apriori算法的关联规则挖掘程序并将程序封装.使用封装好的关联规则挖掘程序对 ...

最新文章

  1. GCC 编译 C++ 程序分步骤流程(预处理 gcc -E、编译 gcc -S、汇编 gcc -c 和链接 gcc 以及 gcc -o 选项)
  2. Javascript操作DOM常用API总结
  3. SHA-1退休:数千万用户通向加密网站之路被阻
  4. JAVA格式化当前日期或者取年月日
  5. 关于脑机接口该如何实现的考虑
  6. 【渝粤教育】广东开放大学 数据结构 形成性考核 (30)
  7. MySQL全文索引模糊查询_mysql全文索引之模糊查询
  8. html5实现无缝滚动的效果,基于JavaScript实现无缝滚动效果
  9. (38)System Verilog线程并行执行(fork-join_none)
  10. 题目1008:最短路径问题(SPFA算法)
  11. Quartz——CronTrigger触发器
  12. H3C交换机SSH配置
  13. 冰点--免积分下载百度文库、豆丁、道客巴巴文章
  14. AB PLC和ESD维护及灯的含义
  15. 数据治理之主数据管理MDM
  16. 双臂14轴机器人YuMi
  17. java 人脸渐变_【邀测人像渐变】【Java】生成GIF图或视频
  18. Flutter 导包错误 Target of URI doesn't exist
  19. HFS学习笔记——基本概念
  20. RabbitMQ 网页端控制台开启方式

热门文章

  1. 【ELT.ZIP】OpenHarmony啃论文俱乐部——计算机视觉数据压缩应用
  2. 关于计算机社团的游戏活动计划,社团心理小游戏活动策划书范文
  3. 漫谈敏捷方法中的信任
  4. python列表功能默写_python 1 默写用递归实现无限极分类 2 默写用树实现无限极分类...
  5. MySql 经纬度查询
  6. 最新的软著自助免费申请教程!
  7. MacBook Touch Bar(触控栏)无法正常工作的解决方法
  8. Wifi文件传输项目总结
  9. mysql 经纬度范围_根据经纬度查询最近距离,mysql查询经纬度附近范围
  10. C# dataGridView控件单元格底色 dataGridView背景色 背景色调整 Header背景色前景色