数据挖掘关联规则分析

什么是关联规则分析

数据挖掘是指以某种方式分析数据源,从中发现一些潜在的有用的信息,所以数据挖掘又称作知识发现,而关联规则挖掘则是数据挖掘中的一个很重要的课题,顾名思义,它是从数据背后发现事物之间可能存在的关联或者联系.有时并不知道数据库中数据的关联函数,即使知道也是不确定的,因此关联分析生成的规则带有可信度.

为什么要进行关联规则分析?

关联规则最初提出的动机是针对购物篮分析(MarketBasketAnalysis)问题提出的.假设分店经理想更多的了解顾客的购物习惯.特别是,想知道哪些商品顾客可能会在一次购物时同时购买?为回答该问题,可以对商店的顾客事物零售数量进行购物篮分析.该过程通过发现顾客放入“购物篮”中的不同商品之间的关联,分析顾客的购物习惯.这种关联的发现可以帮助零售商了解哪些商品频繁的被顾客同时购买,从而帮助他们开发更好的营销策略.

有关关联规则的几个概念

1.事务:每一条交易数据称为一个事务.例如,上表包含了4个事务.

2.项:交易的每一个物品称为一个项.例如,Diaper、Beer等.

3.项集:包含零个或多个项的集合叫作项集.例如,{Beer,Diaper}、{Beer,Cola,Ham}.

4.k-项集:包含k个项的项集叫作k-项集.例如,{Cola,Beer,Ham}叫作3-项集.

5.支持度(Support):一项目组出现的频率称为支持度.

其中

是X和Y共同出现的事务数,N为总事务数.例如,上例中总的事务数为4,{Diaper,Beer}出现的次数为3,所以对{Diaper,Beer}的支持度为75%,这说明有75%的人同时买了Diaper和Beer.

6.频繁集:支持度大于或等于某个阈值(人为设置的最小支持度)的项集就叫作频繁项集.例如,阈值设为50%时,因为{Diaper,Beer}的支持度是75%,所以它是频繁项集

注:1、频繁集的所有非空子集也为频繁集;2、若A项集不是频繁集,则其他项集或事务与A项集的并集也不是频繁集

7.置信度(confidence):对于规则{X}→{Y},它的置信度为{X,Y}出现的次数除以{X}出现的次数.

例如,规则{Diaper}→{Beer}的置信度为3/3,即%,这说明买了Diaper的人%也买了Beer.

8.提升(lift):关联规则A→B下A事件发生对B事件产生的影响程度,也即规则的提升度的意义在于度量项集{X}和项集{Y}的独立性.

注:如lift=1,说明两个条件没有任何关联,如果lift1,说明A条件(或者说A事件的发生)与B事件是相斥的,一般在数据挖掘中当lift3时,我们才承认挖掘出的关联规则是有价值的.

9.强关联规则:大于或等于最小支持度阈值和最小置信度阈值(用户或专家定义的衡量置信度的一个阈值)的规则叫作强关联规则.通常意义上说的关联规则都是指强关联规则.

关联规则挖掘的步骤

对于一个给定的交易事务数据集,关联分析就是指通过用户指定最小支持度和最小置信度来寻求强关联规则的过程,这个过程大体分为两个步骤:

发现频繁项集

发现频繁项集是指通过用户给定的最小支持度,寻找所有频繁项集,即找出不少于用户设定的最小支持度的项目子集,具体为:若支持度大于等于所设定的最小支持度(MinimumSupport)门槛值时,则{A,B}称为高频项目组。一个满足最小支持度的k-itemset,则称为高频k-项目组(Frequentk-itemset),一般表示为Largek或Frequentk.

发现关联规则

发现关联规则是指通过用户给定的最小置信度,在每个最大频繁项集中寻找置信度不小于用户设定的最小置信度的关联规则.

例如:经由高频k-项目组{A,B}所产生的规则A→B,根据公式计算其信赖度,若置信度大于等于最小置信度,则称A→B为关联规则。由此完成了给定水平下关联规则的确定即达到了关联分析的目的.

关联规则挖掘的算法——Apriori算法

Apriori算法的主要思想是找出存在于事务数据集中的最大的频繁项集,在利用得到的最大频繁项集与预先设定的最小置信度阈值生成强关联规则.

Apriori的性质

频繁项集的所有非空子集也必须是频繁项集.根据该性质可以得出:向不是频繁项集I的项集中添加事务A,新的项集I∪A一定也不是频繁项集.

Apriori算法实现的两个过程

1.找出所有的频繁项集(支持度必须大于等于给定的最小支持度阈值),在这个过程中连接步和剪枝步互相融合,最终得到最大频繁项集

.

(1)连接步:连接步的目的是找到K项集。对给定的最小支持度阈值,分别对1项候选集

,剔除小于该阈值的项集得到1项频繁集

;下一步由

自身连接产生2项候选集

,保留

中满足约束条件的项集得到2项频繁集,记为

;再下一步由

连接产生3项候选集

,保留

中满足约束条件的项集得到3项频繁集,记为....这样循环下去,得到最大频繁项集

.

(2)剪枝步:剪枝步紧接着连接步,在产生候选项

的过程中起到减小搜索空间的目的。由于

连接产生的,根据Apriori的性质频繁项集的所有非空子集也必须是频繁项集,所以不满足该性质的项集不会存在于

中,该过程就是剪枝.

2.由频繁项集产生强关联规则:由上一步可知未超过预定的最小支持度阈值的项集已被剔除,如果剩下这些规则又满足了预定的最小置信度阈值,那么就挖掘出了强关联规则.

实例:

下表为heartfailure数据集来自机器学习数据库(网址附在文末),我们这里主要针对定性变量anaemia(贫血)、diabetes(糖尿病)、high_blood_pressure(高血压)、sex(性别)、smoking(是否吸烟)、DEATH_EVENT(死亡事件)这六个定性变量进行关联规则分析,主要使用R语言中arules包:

首先将数据框录入R中,并将数据框转换成transactions形式,数据名为records.

records-read.csv("D:/dataset/heart_failure_clinical_records_dataset.csv",head=T)records-records[,c(2,4,6,10,11,13)]for(iin1:nrow(records)){for(jin1:ncol(records)){if(records[i,j]==1)records[i,j]-"TRUE"elserecords[i,j]-NA}}library(arules)#以稀疏矩阵形式查看mx1-as(records,matrix)head(mx1)#将数据框转换成"transactions"形式records-as(records,"transactions")#查看recordssummary(records)还可以进一步查看每个商品的出现频率并进行灵活的可视化.

iFreq-itemFrequency(records)#降序排列单项集支持度(iFreq[order(-iFreq)])#查看支持度前3的单项集itemFrequencyPlot(records,topN=3,horiz=T)

结果:该心脏衰竭数据集的患者绝大多为男性,且大多有贫血症状大多为糖尿病患者,下图为支持度前三的单项集:

下面基于最小支持度和最小置信度使用apriori算法建立规则并查看.

#利用apriori算法建立规则,支持度为0.05,置信度为0.01rules-apriori(records,parameter=list(support=0.05,confidence=0.01,minlen=2))#按照lift对已建立的规则进行排序并查看前五个inspect(sort(rules,by="lift")[1:5])

结果:吸烟与否与性别关联性很强,大多数男性均吸烟,吸烟人群中也多为男性,既贫血又吸烟的人群中男性居多.

还可以设置更加精细的条件对规则进行进一步挖掘,如我们这里关心什么事件更容易诱发死亡事件.

#取子集,要求右项(rhs)为死亡事件发生且lift大于1.1drules-subset(rules,rhs%in%c("DEATH_EVENT=TRUE")lift1.1)xi#按lift对规则进行降序排序查看前三个规则inspect(sort(drules,by="lift")[1:3])

结果:可以看出同时患有贫血和高血压或糖尿病和高血压的的患者更容易死于心脏衰竭,同时高血压也是诱发心力衰竭死亡的关键因素,由此可见仅患有高血压的患者已经有较大风险死于心率衰竭,而在患有高血压的同时患有贫血或糖尿病则会进一步增加患者死于心力衰竭的几率.

实现关联的可视化,首先要加载arulesViz包和RColorBrewer包.

#用于规则可视化library(arulesViz)#色彩包用于绘图library(RColorBrewer)#shading=“lift”:表示在散点图上颜色深浅的度量是lift。#jitter=2:增加抖动值#col:调色板,默认是个颜色的灰色调色板#brewer.pal(n,name):创建调色板:n表示该调色板内总共有多少种颜色;#name表示调色板的名字(参考help)#这里使用Green这块调色板,引入6种颜色plot(rules,control=list(jitter=2,col=rev(brewer.pal(9,"Greens")[4:9])),Shading=lift)

结果:这下图为规则的分布图,横坐标为支持度(support),纵坐标为置信度(confidence).图中每个点的颜色深浅代表了lift的值,大部分规则的support在0.2以内,confidence在0-0.6内,且confidence大的规则也表现出较大的lift值.

以上的可视化也可由shinytheme包实现交互式的规则展示,并且在交互界面可以得到更加多样的可视图并实现更加方便的规则筛选.

#首先加载shinythemes包library(shinythemes)#跳转到浏览器的交互界面ruleExplorer(rules)小结关联规则是发现数据间的关系:可能会共同发生的那些属性co-occurrence;一个好的规则可以用lift或者FishersExactTest进行校验;当属性(商品)越多的时候,支持度会比较低;关联规则的发掘是交互式的,需要不断的检查、优化.

附:机器学习网址

转载请注明:http://www.sonphie.com/lcbx/14591.html

网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

当前时间: