数据挖掘之关联规则分析

关联规则分析也称为购物篮分析,最早是为了发现超市销售数据库中不同的商品之间的关联关系。

用于寻找数据集中各项之间的关联关系。根据所挖掘的关联关系,可以从一个属性的信息来推断另一个属性的信息。当置信度达到某一阈值时,可以认为规则成立。

常用的关联规则算法

算法名称算法描述
Apriori

关联规则最常用、最经典的挖掘频繁项集的算法,核心思想是通过连接产生候选项及其支持度,然后通过剪枝生成频繁项集

无法处理连续型数值变量,往往分析之前需要对数据进行离散化。

FP-Tree

针对Apriori算法固有的多次扫描事务数据集的缺陷,提出的不产生候选频繁项集的方法。

Apriori和FP-Tree都是寻找频繁项集的算法

Eclat算法一种深度优先算法,采用垂直数据表示形式,在概念格理论的基础上利用基于前缀的等价关系将搜索空间划分为较小的子空间
灰色关联法分析和确定各因素之间的影响程度,或是若干个子因素(子序列)对主因素(母序列)的贡献度而进行的一种分析方法

本文介绍最常用的Apriori算法。

项集:项的集合。包含k个项的项集成为k项集,如集合{牛奶、麦片、糖}是一个3项集

频繁项集:如果项集I的相对支持度满足预定义的最小支持度阈值,则I是频繁项集

支持度(相对支持度):项集A、B同时发生的概率。

置信度:项集A发生,则项集B发生的概率。

最小支持度:用户或专家定义的衡量支持度的一个阈值,表示项集在统计意义上的最低重要性。

最小置信度:用户或专家定义的衡量置信度的一个阈值,表示关联规则的最低可靠性。同时满足最小支持度阈值和最小置信度阈值的规则成为强规则。

目前,设置最小支持度和最小置信度,大部分根据业务经验设置初始值,然后经过多次调整,获取与业务相符的关联规则结果。


举例1:

R语言实现:

1、创建稀疏矩阵

tr <- read.transactions("menu_orders.txt",format="basket",sep=",") #读入源数据并创建稀疏矩阵
#format=c("basket", "single")用于注明源数据的格式。如果源数据每行内容就是一条交易购买的商品列表(类似于一行就是一个购物篮)那么使用basket;如果每行内容是交易号+单个商品,那么使用single。
summary(tr) #查看数据集相关的统计汇总信息

inspect(tr) #查看稀疏矩阵的内容

输出如下:

2、采用Apriori算法建模

rule0 = apriori(tr,parameter = list(support=0.2,confidence = 0.5)) #设定支持度为0.2,置信度为0.5

3、输出模型结果

inspect(rule0)

输出结果如下:

结果分析(以结果第12条为例):

a、b同时发生的概率是50%。

a发生,则b发生的概率是71.42857%。

这样就可以进行智能推荐了。


举例2:

trans = as(a,"transactions") #将数据转换成transactions属性

inspect(trans[1:5]) #观察前五行的数据

rules = apriori(trans,parameter = list(support=0.06,confidence = 0.75)) #调用Apriori算法,最小支持度为0.06,最小置信度为0.75

rules #显示rules中关联规则条数

inspect(rules) #观测rules中的关联规则

输出结果如下:

结果分析(以结果第2条为例):

A4、F3~H4的支持度最大,为7.85%,置信度为87.96%。说明当A4、F3的条件满足时,H4的可能性为87.96%,而这种情况发生的可能性为7.85%。

 

Python实现:

import pandas as pd 
from apriori import * 导入自己编写的Apriori函数
data = pd.read_excel("menu_orders.xls",header=None)

print(u'\n转换原始数据为0-1矩阵')
ct = lambda x:pd.Series(1,index=x[pd.notnull(x)]) #转换0-1矩阵的过渡函数
b = map(ct,data.as_matrix()) #用map方式执行
data = pd.DataFrame(list(b)).fillna(0) #实现矩阵转换,空值用0填充
print(u'\n转换完毕。')
del b #删除中间变量b,节省内存

support = 0.2 #最小支持度
confidence = 0.5 #最小置信度
ms = '---' #连接符
find_rule(data,support,confidence,ms).to_excel('1.xls')

输出结果如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值