python 数据挖掘 关联规则挖掘 实践 Apriori FP-Tree mlxtend
1 引言
关联规则分析也成为购物篮分析,最早是为了发现超市销售数据库中不同的商品之间的关联关系。例如一个超市的经理想要更多地了解顾客的购物习惯,比如“哪组商品可能会在一次购物中同时购买?”或者“某顾客购买了个人电脑,那该顾客三个月后购买数码相机的概率有多大?”他可能会发现如果购买了面包的顾客同时非常有可能会购买牛奶,这就导出了一条关联规则“面包=>牛奶”,其中面包称为规则的前项,而牛奶称为后项。通过对面包降低售价进行促销,而适当提高牛奶的售价,关联销售出的牛奶就有可能增加超市整体的利润。关联规则分析是数据挖掘中最活跃的研究方法之一,目的是在一个数据集中找出各项之间的关联关系,而这种关系并没有在数据中直接表示出来。
2 Apriori 介绍
举个例子,在购物数据中,纸巾对应鸡爪的置信度为40%,支持度为1%。则意味着在购物数据中,总共有1%的用户既买鸡爪又买纸巾;同时买鸡爪的用户中有40%的用户购买纸巾。
对于Apriori算法,我们使用支持度来作为我们判断频繁项集的标准。Apriori算法的目标是找到最大的K项频繁集。这里有两层意思,首先,我们要找到符合支持度标准的频繁集。但是这样的频繁集可能有很多。第二层意思就是我们要找到最大个数的频繁集。比如我们找到符合支持度的频繁集AB和ABE,那么我们会抛弃AB,只保留ABE,因为AB是2项频繁集,而ABE是3项频繁集。那么具体的,Apriori算法是如何做到挖掘K项频繁集的呢?
Apriori算法采用了迭代的方法,先搜索出候选1项集及对应的支持度,剪枝去掉低于支持度的1项集,得到频繁1项集。然后对剩下的频繁1项集进行连接,得到候选的频繁2项集,筛选去掉低于支持度的候选频繁2项集,得到真正的频繁二项集,以此类推,迭代下去,直到无法找到频繁k+1项集为止,对应的频繁k项集的集合即为算法的输出结果。
Aprior算法是一个非常经典的频繁项集的挖掘算法,很多算法都是基于Aprior算法而产生的,包括FP-Tree,GSP, CBA等。这些算法利用了Aprior算法的思想,但是对算法做了改进,数据挖掘效率更好一些,因此现在一般很少直接用Aprior算法来挖掘数据了,但是理解Aprior算法是理解其它Aprior类算法的前提,同时算法本身也不复杂,因此值得好好研究一番。
3 Apriori python 实现
简单的库实现:apyori。不推荐。
机器学习扩展库:mlxtend 。推荐。
安装:
conda install mlxtend
测试:
安装好后官网的测试代码测试一次:
http://rasbt.github.io/mlxtend/
- 概览
apriori里面是简单实现,介绍了基本原理和使用。可以根据最小支持度生成频繁项集。项集支持度能够 大于等于最小支持度的项集就是频繁项集。
association_rules里面是关联规则生成。可以用频繁项集生成关联规则。
fpgrowth 里面采用FP-Tree实现,普通的apriori算法中间计算过程有大量过程量,不适合大数据,FP-Tree就改进了apriori,用树实现,而且速度能比apriori快五倍。
fpmax 就是生成最大的K项频繁集。
地址:http://rasbt.github.io/mlxtend/USER_GUIDE_INDEX/#frequent_patterns
用apriori生成频繁项集:
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori"""购物篮数据"""
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_)
print(df.to_string())"""大于等于最小支持度的项集是频繁项集"""
res1 = apriori(df, min_support=0.6)
print(res1.to_string())"""表达方式"""
res2 = apriori(df, min_support=0.6, use_colnames=True)
print(res2.to_string())
关联规则:
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, fpmax, fpgrowth"""购物篮数据"""
dataset = [['牛奶', '鸡蛋', '蛤蜊'],['牛奶', '苹果', '鸡蛋'],['面包', '土豆'],['牛奶', '苹果', '鸡蛋'],]"""热编码数据才行"""
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)
print(df.to_string())"""表达方式"""
res2 = fpgrowth(df, min_support=0.4, use_colnames=True)
print(res2.to_string())from mlxtend.frequent_patterns import association_rulesres = association_rules(res2, metric="confidence", min_threshold=0.5)print(res.to_string())
python 数据挖掘 关联规则挖掘 实践 Apriori FP-Tree mlxtend相关推荐
- 数据挖掘-关联规则挖掘之Apriori算法
目录 一.定义 二.Apriori定律 Apriori定律1): Apriori定律2): 三.Apriori算法工作原理: 四.Apriori算法特点: 一.定义 Apriori是由a priori ...
- 【Python数据挖掘课程笔记】八.关联规则挖掘及Apriori实现购物推荐
#2018-03-23 10:48:40 March Friday the 12 week, the 082 day SZ SSMR[Python数据挖掘课程笔记]八.关联规则挖掘及Apriori实现 ...
- 《python数据挖掘》和《python数据挖掘入门与实践》两本书读后感
这些天花了很多时间来学习数据挖掘这门课程,有很多心得和感悟,所以写下这篇博客来表达自己读完这两本书的感受! 首先推荐大家通过这两本书来入门数据挖掘这个领域,python数据挖掘这本书较容易,还花了很大 ...
- python数据挖掘与机器学习实践技术
分析机器学习在应用时需要掌握的经验及编程技巧.通过实际案例的形式,介绍如何提炼创新点,以及如何发表高水平论文等相关经验.旨在掌握Python编程的基础知识与技巧.特征工程(数据清洗.变量降维.特征选择 ...
- Python数据挖掘入门与实践---用决策树预测获胜球队
数据集来源:1. 2013-14 NBA Schedule and Results 2.2013年 NBA 赛季排名情况 参考书籍:<Python数据挖掘入门与实践> 1.加载数据集: ...
- Python数据挖掘入门与实践-OneR分类算法
Python数据挖掘入门与实践-OneR分类算法 OneR算法 OneR算法是根据已有的数据中,具有相同特征值的个体最可能属于哪个类别进行分类. 在本例中,只需选区Iris是个特征中分类效果最好的一个 ...
- python数据挖掘与入门实践(2.2)用sciket-learn估计器分类
接python数据挖掘与入门实践(2.1)用sciket-learn估计器分类 三.运行算法 交叉验证一般分为三类:double-fold CV 即经常所说的2折交叉:10-fold交叉和LOO(le ...
- 《python数据挖掘入门与实践》决策树预测nba数据集
前言: 学到决策树预测球队输赢时,按照书中网址去下载数据集,无奈怎么也没下载成功.即使下载了excel文件也是破损的.咱可是学了python的银,那好吧,我就把它爬取下来.(资源在下面) 代码: '' ...
- 改写《python数据挖掘入门与实践》第九章Gutenberg书籍下载代码
@数据挖掘 改写<python数据挖掘入门与实践>第九章Gutenberg书籍下载代码 可能是gutenberg网站改版的缘故,随书附带的getdata.py代码执行会报错. 个人将其进行 ...
最新文章
- springboot 整合retry(重试机制)
- 若使用numba.cuda.jit加速pytorch训练代码会怎样
- Common FileUpload组件的简单使用
- Python基础-面向对象编程
- matlab中fliter函数,用C语言实现MATLAB中Filter()函数
- [luoguP1029] 最大公约数和最小公倍数问题(数论)
- Django web开发系列(五)模板
- nginx反向代理配置如何去除前缀
- MTK 驱动(58)---MTK G-sensor
- c函数sscanf的高级技巧(二)
- 条件表达式计算个人所得税c语言,个税的计算C语言实现,结果为什么是负的?...
- opencv4版本和3版本_Spring Boot 太狠了,一口气发布了 3 个版本!
- mysql double 和Oracle,oraclemysql对比
- FrameLayout AbsoluteLayout GridLayout用法及实例
- C语言程序设计实验报告——实验四
- 人工智能实验——八数码难题
- 论文写作—如何添加图注、公式、表注的序号,自动编号,交叉引用方式
- 第一个开源小软件二维码批量生成工具
- (十二:2020.08.28)CVPR 2016 追踪之论文纲要(译)
- 美国西北大学计算机硕士offer,已经被心仪的美国院校放入Waitlist!还有多大的转正几率?...