大数据分析-关联规则

大数据分析-关联规则


我=我1, 一世2, …, 一世n是一组称为项的 n 个二进制属性。D = t1, t2, …, tm是一组称为数据库的事务。D 中的每个交易都有一个唯一的交易 ID,并包含 I 中项目的一个子集。规则定义为 X ⇒ Y 形式的蕴涵,其中 X, Y ⊆ I 和 X ∩ Y = ∅。

项目集(对于短项目集)X 和 Y 被称为规则的先行(左侧或 LHS)和结果(右侧或 RHS)。

为了说明这些概念,我们使用超市领域的一个小例子。项目集是 I = {牛奶、面包、黄油、啤酒},包含这些项目的小型数据库如下表所示。

Transaction ID 项目
1 牛奶、面包
2 牛油面包
3 啤酒
4 牛奶、面包、黄油
5 牛油面包

超市的一个示例规则可以是 {milk, bread} ⇒ {butter} 意味着如果购买了牛奶和面包,顾客也会购买黄油。为了从所有可能规则的集合中选择感兴趣的规则,可以使用对重要性和兴趣的各种度量的约束。最著名的约束是支持度和置信度的最小阈值。

项集 X 的支持度 supp(X) 定义为包含该项集的数据集中事务的比例。在表 1 的示例数据库中,项目集 {milk, bread} 的支持率为 2/5 = 0.4,因为它出现在所有事务的 40% 中(5 个事务中有 2 个)。查找频繁项集可以看作是对无监督学习问题的简化。

规则的置信度定义为 conf(X ⇒ Y ) = supp(X ∪ Y )/supp(X)。例如,规则 {milk, bread} ⇒ {butter} 在表 1 的数据库中的置信度为 0.2/0.4 = 0.5,这意味着对于 50% 的包含牛奶和面包的交易,该规则是正确的。置信度可以解释为概率 P(Y|X) 的估计,即在这些交易也包含 LHS 的情况下,在交易中找到规则的 RHS 的概率。

在位于bda/part3/apriori.R的脚本中,可以找到实现apriori 算法的代码

# Load the library for doing association rules
# install.packages(’arules’) 
library(arules)  

# Data preprocessing 
data("AdultUCI") 
AdultUCI[1:2,]  
AdultUCI[["fnlwgt"]] <- NULL 
AdultUCI[["education-num"]] <- NULL  

AdultUCI[[ "age"]] <- ordered(cut(AdultUCI[[ "age"]], c(15,25,45,65,100)), 
   labels = c("Young", "Middle-aged", "Senior", "Old")) 
AdultUCI[[ "hours-per-week"]] <- ordered(cut(AdultUCI[[ "hours-per-week"]], 
   c(0,25,40,60,168)), labels = c("Part-time", "Full-time", "Over-time", "Workaholic")) 
AdultUCI[[ "capital-gain"]] <- ordered(cut(AdultUCI[[ "capital-gain"]], 
   c(-Inf,0,median(AdultUCI[[ "capital-gain"]][AdultUCI[[ "capitalgain"]]>0]),Inf)), 
   labels = c("None", "Low", "High")) 
AdultUCI[[ "capital-loss"]] <- ordered(cut(AdultUCI[[ "capital-loss"]], 
   c(-Inf,0, median(AdultUCI[[ "capital-loss"]][AdultUCI[[ "capitalloss"]]>0]),Inf)), 
   labels = c("none", "low", "high"))

为了使用 apriori 算法生成规则,我们需要创建一个交易矩阵。以下代码显示了如何在 R 中执行此操作。

# Convert the data into a transactions format
Adult <- as(AdultUCI, "transactions") 
Adult 
# transactions in sparse format with 
# 48842 transactions (rows) and 
# 115 items (columns)  

summary(Adult)  
# Plot frequent item-sets 
itemFrequencyPlot(Adult, support = 0.1, cex.names = 0.8)  

# generate rules 
min_support = 0.01 
confidence = 0.6 
rules <- apriori(Adult, parameter = list(support = min_support, confidence = confidence))

rules 
inspect(rules[100:110, ]) 
# lhs                             rhs                      support     confidence  lift
# {occupation = Farming-fishing} => {sex = Male}        0.02856148  0.9362416   1.4005486
# {occupation = Farming-fishing} => {race = White}      0.02831579  0.9281879   1.0855456
# {occupation = Farming-fishing} => {native-country     0.02671881  0.8758389   0.9759474
                                       = United-States} 

觉得文章有用?

点个广告表达一下你的爱意吧 !😁