R关联规则分析之Arules包详解

Arules包详解

  1. 包基本信息

发布日期:2014-12-07

题目:挖掘关联规则和频繁项集

描述:提供了一个表达、处理、分析事务数据和模式(频繁项集合关联规则)的基本框架。

URL:http://R-Forge.R-project.org/projects/arules/,http://lyle.smu.edu/IDA/arules/

依赖包: Matrix包

建议学习包:pmml, XML, arulesViz, testthat

作者(牛牛们):Michael Hahsler [aut, cre, cph],Christian Buchta [aut, cph],Bettina Gruen [aut, cph],Kurt Hornik [aut, cph],Christian Borgelt [ctb, cph]

包维护人员:Michael Hahsler [email protected]

Arules包设计的方法一览表


函数


函数


函数



数据集


addComplement

Affinity

aggregate

Apriori

Combine

Coverage

crossTable

discretize

dissimilarity

duplicated

eclat

Groceries

image

Inspect


interestMeasure

is.closed

is.maximal

is.superset

itemCoding

itemFrequency

itemFrequencyPlot

itemSetOperations

Length

LIST

match

merge


predict

random.transactions

read.PMML

read.transactions

ruleInduction

Sample

setOperations

size

sort

subset

support

supportingTransactions

unique

write


APappearance-class

AScontrol-classes

ASparameter-classes

associations-class

itemsets-class

itemMatrix-class

proximity-classes

transactions-class

rules-class

tidLists-class


Adult

Epub

AdultUCI

Groceries

Income

IncomeESL

  1. 函数介绍

    1. addComplement:向事务数据中添加complement-items(其实就是额外添加补充项)

      1. 描述

该函数的功能就是向每一个条事务记录中添加人工构造的项(artificial item)(而这些项在原数据中并没有!)

  1. 用法

addComplement(x, labels, complementLabels=NULL)

### x:一个transaction类对象

### labels:字符串,项标签(针对创建的complements项标签)

### complementLabels:字符串,人工构造的补充项的标签. 如果被忽略, 会在原始标签之前加上"!"符号来形成补充项的标签!

  1. 返回值

返回一个添加了补充项的transaction类对象

  1. 例子

#####查看数据基本信息!

> data(‘Groceries‘)

> head(Groceries)

transactions in sparse format with

6 transactions (rows) and

169 items (columns)

> dim(Groceries)

[1] 9835 169

> class(Groceries)

[1] "transactions"

attr(,"package")

[1] "arules"

> typeof(Groceries) #可以看到Groceries事务数据是以S4类型存储的,格式如下

[1] "S4"

……………………此处省略无数……………………..

9833 {chicken,

citrus fruit,

other vegetables,

butter,

yogurt,

frozen dessert,

domestic eggs,

rolls/buns,

rum,

cling film/bags}

9834 {semi-finished bread,

bottled water,

soda,

bottled beer}

9835 {chicken, ###可以看到9833,9834等是一笔事务记录,即项集,里面存的是项

tropical fruit,

other vegetables,

vinegar,

shopping bags}

NULL

######(1)为"whole milk"和"other vegetables"添加补充项(complement-items)

@@@初始状态!

> inspect(head(Groceries,3))

items

1 {citrus fruit,

semi-finished bread,

margarine,

ready soups}

2 {tropical fruit,

yogurt,

coffee}

3 {whole milk}

> g2 <- addComplement(Groceries, c("whole milk", "other vegetables"))

@@@添加后的状态!

> inspect(head(g2,3))

items

1 {citrus fruit,

semi-finished bread,

margarine,

ready soups,

!whole milk, ## 可以看到补充项被添加到每一个事务记录中!

!other vegetables}

2 {tropical fruit,

yogurt,

coffee,

!whole milk,

!other vegetables}

3 {whole milk,

!other vegetables}

########(2)为补充项使用自定义标签!

> g2 <- addComplement(g2, "coffee", "NO coffee")

> inspect(head(g2,3))

items

1 {citrus fruit, ##第一个事务中没有"coffee"项,所有就添加了一个"No coffee"项

semi-finished bread,

margarine,

ready soups,

!whole milk,

!other vegetables,

NO coffee}

2 {tropical fruit, ##第二个事务中有"coffee"项,所以"NO coffee"项不被添加到这儿

yogurt,

coffee,

!whole milk,

!other vegetables}

3 {whole milk,

!other vegetables,

NO coffee}

  1. affinity:计算项与项之间的密切关系(affinity)
  1. 描述

提供了泛函affinity和S4方法来计算和返回事务集合中项与项之间的亲密关系相似矩阵!

  1. 用法

### x:一个矩阵、itemMatrix类对象、事务数据

  1. 细节说明

两个项i和j之间的亲密程度被(Aggarwal et al. (2002))定义为

其中,sup(.)是支持度度量值,这意味着亲密度(affinity)是项与项之间的Jaccard similarity!

  1. 返回值

返回一个ar_similarity类对象,表示了x中项与项之间的亲密程度

  1. 例子

> data(‘Adult‘)

> s<-sample(x = Adult,size = 500)

> s

transactions in sparse format with

500 transactions (rows) and

115 items (columns)

> a <- affinity(s)

> summary(as.vector(a))

Min. 1st Qu. Median Mean 3rd Qu. Max.

0.00000 0.00000 0.00000 0.06478 0.01786 1.00000

…………………………………………………………..…此处省略无数………………………………………………………

从上面可以看出,affinity函数是计算了两两项之间的亲密度,并以矩阵的形式返回!

  1. aggregate:将项(items)聚合成项集(item groups)
  1. 描述

比如在一个超市数据中,"bread"和"beagle"项可能属于"baked goods"项组(类别). Aggregate方法使用用户指定的项组(item group)替换事务数据(transactions)中的项、项集、规则!

如果规则被聚合,会导致在lhs和rhs中的出现相同的项,此时, 这些相同的项从lhs中移除!聚合后不唯一的规则或项集也会被移除!

  1. 用法

## S4 method for signature ‘itemMatrix‘

aggregate(x, itemLabels)

## S4 method for signature ‘itemsets‘

aggregate(x, itemLabels)

## S4 method for signature ‘rules‘

aggregate(x, itemLabels)

#### x:一个事务表,项集或规则对象

####itemLables:和x中项长度相同的字符串向量。接收到相同项标签(item label)的项将会被聚合!

  1. 例子

> data(Groceries)

### Groceries包含了一个存储在itemInof中的层次结构(hierarchy)

>head(itemInfo(Groceries))

> level1 <- itemInfo(Groceries)[["level1"]]

> levels(level1) #查看level1中水平

[1] "canned food" "detergent" "drinks"

[4] "fresh products" "fruit and vegetables" "meet and sausage"

[7] "non-food" "perfumery" "processed food"

[10] "snacks and candies"

######(1)聚合事务数据

> aggregate(Groceries, level1)

transactions in sparse format with

9835 transactions (rows) and

10 items (columns)

> Groceries

transactions in sparse format with

9835 transactions (rows) and

169 items (columns)

> inspect(agg[1])

items

1 {fresh products,

fruit and vegetables,

processed food}

> inspect(Groceries[1])

items

1 {citrus fruit,

semi-finished bread,

margarine,

ready soups}

#######(2)聚合规则

> rules <- apriori(Groceries, parameter=list(supp=0.005, conf=0.5))

Parameter specification:

confidence minval smax arem aval originalSupport support minlen maxlen target ext

0.5 0.1 1 none FALSE TRUE 0.005 1 10 rules FALSE

Algorithmic control:

filter tree heap memopt load sort verbose

0.1 TRUE TRUE FALSE TRUE 2 TRUE

apriori - find association rules with the apriori algorithm

version 4.21 (2004.05.09) (c) 1996-2004 Christian Borgelt

set item appearances ...[0 item(s)] done [0.00s].

set transactions ...[169 item(s), 9835 transaction(s)] done [0.00s].

sorting and recoding items ... [120 item(s)] done [0.00s].

creating transaction tree ... done [0.00s].

checking subsets of size 1 2 3 4 done [0.00s].

writing ... [120 rule(s)] done [0.00s].

creating S4 object ... done [0.00s].

> rules

set of 120 rules

> aggregate(rules, level1)

set of 18 rules

> rules[1:3]

set of 3 rules

> inspect(rules[1:3])

lhs rhs support confidence lift

1 {baking powder} => {whole milk} 0.009252669 0.5229885 2.046793

2 {other vegetables,

oil} => {whole milk} 0.005083884 0.5102041 1.996760

3 {root vegetables,

onions} => {other vegetables} 0.005693950 0.6021505 3.112008

> inspect(aggregate(rules, level1)[1:3])

lhs rhs

1 {processed food} => {fresh products}

2 {fruit and vegetables,

processed food} => {fresh products}

3 {} => {fruit and vegetables}

@@@注:从这里可以看出,聚合时,使用大类把属于特定大类的小类给替换掉了,替换后有重复项的也一并删除,因此,得到的规则就会很多很多!

  1. APappearance-class:指定apriori算法参数的"appearance"
  1. 描述

对apriori算法挖掘的关联进行控制,注意:对于eclat算法,appearance参数是不支持的!

  1. 类对象

如果使用appearance控制(restrictions),一个appearance对象将会在apriori函数中被自动创建,使用的是appearance参数的命名列表(list)中的信息。这个列表可以包含如下元素:

lhs, rhs, both, items, none:字符串向量,用于指定可以出现在指定地点的项标签(lhs、rhs、both用于rules规则;itens用于itemsets项集)。特殊的地点 none指定不能出现在rule规则或itemset项集中的items项!

default:可以是both、lhs、rhs和none中的一个,默认项是both;为所有的项指定默认的appearance!

  1. 例子

data("Adult")

######(1)仅仅查找不包括small or large income的频繁项集

is <- apriori(Adult, parameter = list(support= 0.1, target="frequent"),

appearance = list(none = c("income=small", "income=large"),

default="both"))

> items(is)

itemMatrix in sparse format with

2066 rows (elements/transactions) and

115 columns (items)

> itemFrequency(items(is))["income=small"]

income=small

0

> itemFrequency(items(is))["income=large"]

income=large

0

#####(2)查找只包含small or large income 和young age的项集

> is <- apriori(Adult, parameter = list(support= 0.1, target="frequent"),

+ appearance = list(items = c("income=small", "income=large", "age=Young"),

+ default="none"))

> inspect(head(is))

items support

1 {income=large} 0.1605381

2 {age=Young} 0.1971050

3 {income=small} 0.5061218

4 {age=Young,

income=small} 0.1289259

#####(3)在right-hand-side中查找只包含有small or large income的规则

rules <- apriori(Adult, parameter = list(support=0.2, confidence = 0.5),

appearance = list(rhs = c("income=small", "income=large"),

default="lhs"))

inspect(head(rules))

  1. apriori:使用apriori算法挖掘关联规则
  1. 用法

apriori(data, parameter = NULL, appearance = NULL, control = NULL)

#### data:事务数据类对象

  1. AScontrol-classes:"AScontrol类,APcontrol类"指定apriori算法的"control"参数
  1. 描述

AScontrol类保存使用的挖掘算法的算法参数。APcontrol直接扩展了AScontrol类,添加了只适用于apriori算法的其他参数的插槽(slots),即可以接受更多的参数,并且这些参数只适用于apriori算法!(相当于个性改装!)

AScontrol中常用的插槽(slots):

sort:一个整数标量,默认值为2,表示针对项的频率,如何对项排序。

  1. 升序;-1—降序;0:—不排序;2—升序;-2:—关于事务量和来降序

verbose:逻辑值,表示是否报告输出进度(progress)

其他插槽

Filter:数值型标量,表示如何过滤事务中未使用的项(unused items), 默认为0.1

Tree:逻辑值,表示是否将事务组织成一个前缀树(prefix tree),默认为TRUE

Heap:逻辑值,表示是否使用heapsort而不是quicksort来对事务排序,默认为TRUE

Memopt:逻辑值,表示是否最小化内存使用,而不是最大化速度,默认为FALSE

Load:逻辑值,表示是否加载事务到内存中,默认为TRUE

  1. ASparameter-classes:指定apriori算法的"parameter"参数
  1. 插槽(slots)

ASparameter定义的常用插槽


support:默认为0.1


数值型:一个项集的最小支持度


minLen:默认为1


整型:每一个项集的最小项数


maxlen:默认为10


整型:每一个项集的最大项数


target


字符串:指定挖掘关联的类型


ext:默认为FALSE


逻辑值:表示是否生成关于quality measures(比如:lhs.support)的额外信息

注:target可以是:"frequent itemsets";"maximally frequent itemsets"; "closed frequent itemsets"; "rules" (only available for Apriori); "hyperedgesets"

其他slots


confidence:默认为0.8


数值型:规则或关联超边的最小置信度


smax:默认为1


数值型:项集/规则/超边的最大支持度


arem:默认为none


字符串:表示使用额外的规则评估度量


aval


逻辑值:表示是否arem选择返回其他规则评估度量


minval:默认为0.1


数值型:arem选择的其他评估度量的最小值


originalSupport:默认为TRUE


逻辑值:表示是否对最小支持度使用一个规则(lhs和rhs)的原始支持度定义而不是支持度.

注:对于arem插槽,可以有的其他度量:"none": no additional evaluation measure;"diff": absolute confidence difference;"quot": difference of confidence quotient to 1;"aimp": absolute difference of improvement to 1;"info": information difference to prior;"chi2": normalized measure!

  1. Association-class:关联的一个集合
  1. 描述

Association类是一个虚拟类,用于表达挖掘结果(比如项集/规则的集合)。该类提供了对quality插槽的访问权,记忆对关联排序的一个方法!

  1. slots

quality:一个quality度量(相关度量如支持度或置信度)的数据框。每一个quality度量都是一个命令向量,其长度和关联集中的元素数量相同。

info:一个列表,用于存储特定算法的挖掘信息。一般来说,它至少包含了"data"元素(data是事务数据集的名称);"ntransactions"(数据集的长度);"support"(用于挖掘的最小支持度)!

拥有的方法有:info、items、labels、length、quality和show

  1. combine:合并对象,简写为c
  1. 描述

基于itemMatrix将几个对象合并成一个对象;注意:使用union而不是c将几个挖掘的itemsets或规则合并成一个集合。

  1. 用法

## S4 method for signature ‘itemMatrix‘

c(x, ..., recursive = FALSE)

## S4 method for signature ‘transactions‘

c(x, ..., recursive = FALSE)

## S4 method for signature ‘rules‘

c(x, ..., recursive = FALSE)

## S4 method for signature ‘itemsets‘

c(x, ..., recursive = FALSE)

###### x:第一个对象

###### ……和x同属一个类的其他对象

###### recursive:逻辑值,如果为TRUE,the function recursively descends through lists combining all their elements into a vector!

  1. 例子

data("Adult")

#####(1)合并事务数据

> a1 <- Adult[1:10]

> a2 <- Adult[101:110]

> Adult[1:10]

transactions in sparse format with

10 transactions (rows) and

115 items (columns)

> Adult[101:110]

transactions in sparse format with

10 transactions (rows) and

115 items (columns)

> aComb <- c(a1, a2)

> aComb

transactions in sparse format with

20 transactions (rows) and

115 items (columns)

> summary(aComb)

transactions as itemMatrix in sparse format with

20 rows (elements/itemsets/transactions) and

115 columns (items) and a density of 0.1121739

#######(2)合并规则(可以包含重复的规则多次)—combine

r1 <- apriori(Adult[1:1000])

r2 <- apriori(Adult[1001:2000])

> r1

set of 8500 rules

> r2

set of 8575 rules

> rComb <- c(r1, r2)

> rComb

set of 17075 rules

######(3)连接规则(只有唯一规则的一个集合:和unique(rComb)等价)---union

> rUnion <- union(r1,r2)

> rUnion

set of 9928 rules

  1. Coverage:计算规则的覆盖率(calculate coverage for rules)
  1. 描述

计算规则的覆盖率(lhs的支持度)

  1. 用法

coverage(x, transactions = NULL, reuse = TRUE)

#### x:规则集合

### transactions:用于生成"x"的数据集,当"x"的quality插槽不包含支持度和置信度时才需要指定该参数

### reuse:重新使用存储在"x"中的支持度和置信度,或者重新从transactions中计算

  1. 细节

Coverage is calculated from the rules quality measures (support and confidence) stored in the quality slot

  1. 返回值

A numeric vector of the same length as x containing the coverage values for the sets in x.

  1. 例子

## find and some rules (we only use 5 rules here) and calculate coverage

> data(‘Income‘)

> rules <- apriori(Income)[1:5]

> quality(rules) <- cbind(quality(rules), coverage = coverage(rules))

> inspect(rules)

时间: 2024-11-07 20:02:05

R关联规则分析之Arules包详解的相关文章

Android 4.4 KitKat NotificationManagerService使用详解与原理分析(一)__使用详解

概况 Android在4.3的版本中(即API 18)加入了NotificationListenerService,根据SDK的描述(AndroidDeveloper)可以知道,当系统收到新的通知或者通知被删除时,会触发NotificationListenerService的回调方法.同时在Android 4.4 中新增了Notification.extras 字段,也就是说可以使用NotificationListenerService获取系统通知具体信息,这在以前是需要用反射来实现的. 转载请

ORACLE之UTL_FILE包详解

1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录.      方法:        1.alter system set utl_file_dir='e:/utl' scope=spfile;        2.在init.ora文件中,配置如下:UTL_FILE=E:/utl或者UTL_FILE_DIR=E:/utl;(2)Oracle10g之后的版本,只需要先创建一个路径即可.

Android SDK中的Support兼容包详解

这篇文章主要介绍了Android SDK中的Support兼容包详解,本文详细区分了Support Library的版本区别.各种Theme的概念和使用注意事项等内容,需要的朋友可以参考下 背景 来自于知乎上邀请回答的一个问题Android中AppCompat和Holo的一个问题?, 看来很多人还是对这些兼容包搞不清楚,那么干脆写篇博客吧. Support Library 我们都知道Android一些SDK比较分裂,为此google官方提供了Android Support Library pac

Spring Boot的每个模块包详解

Spring Boot的每个模块包详解,具体如下: 1.spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2.spring-boot-starter-actuator 帮助监控和管理应用. 3.spring-boot-starter-amqp 通过spring-rabbit来支持AMQP协议(Advanced Message Queuing Protocol). 4.spring-boot-starter-aop 支持面向方面的编程

转:android Support 兼容包详解

本文转自stormzhang的ANDROID SUPPORT兼容包详解 背景 来自于知乎上邀请回答的一个问题Android中AppCompat和Holo的一个问题?, 看来很多人还是对这些兼容包搞不清楚,那么干脆写篇博客吧. Support Library 我们都知道Android一些SDK比较分裂,为此google官方提供了Android Support Library package 系列的包来保证高版本sdk开发的向下兼容性, 所以你可能经常看到v4,v7,v13这些数字,首先我们就来理清

Spring——jar包详解(转)

Spring——jar包详解 org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spring 2.5.6的时候需要asm jar包,spring3.0开始提供它自己独立的asm jar包 org.springframework.aspects——Spring提供的对AspectJ框架的整合 org.springframework.beans——所有应用都用到,包含访问配置文件,创建和

2.TCP_IP互联线缆_TCP_UDP报文抓包详解

TCP_IP互联线缆_TCP_UDP报文抓包详解 2.1网线标准 直通线 交叉线 异种设备互联使用直通线 同种设备互联使用交叉线 TCP和UDP 端口寻址 TCP数据格式 TCP三次握手 UDP数据格式 IP报头格式 ICMP报文格式 ARP协议 ARP报文格式

Spring中的jar包详解

下面给大家说说spring众多jar包的特点吧,无论对于初学spring的新手,还是spring高手,这篇文章都会给大家带来知识上的收获,如果你已经十分熟悉本文内容就当做一次温故知新吧.spring.jar 是包含有完整发布的单个jar包,spring.jar中除了spring-mock.jar里所包含的内容外其他所有jar包的内容,因为只有在研发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的. 除了spring.jar文件,Spring还包括有其他1

iOS开发——使用Charles进行https网络抓包详解

我在前面两篇博客中<网络抓包工具Charles的介绍与使用><iOS开发--使用Charles进行http网络抓包详解>对Charles的http抓包进行了详细的讲解.今天我们来实现一下进行https的抓包,比http抓包稍微麻烦一点. (1)https初级的配置请参考<网络抓包工具Charles的介绍与使用>中的https配置部分. (2)由于目前iOS9更改了对于https网络的安全机制,所以还需要在iPhone上安装一个证书,安装方式如下: 在iPhone的Saf