- 大数据分析有用的资源
- 大数据分析 - 快速指南
- 大数据分析 - 资源
- 大数据分析 - 讨论
大数据分析-关联规则
令I = i 1 , i 2 , ..., i n为一组称为项目的 n 个二进制属性。令D = t 1 , t 2 , ..., t m为一组称为数据库的事务。D 中的每笔交易都有一个唯一的交易 ID,并包含 I 中项目的子集。规则被定义为 X ⇒ Y 形式的蕴涵,其中 X、Y ⊆ I 和 X ∩ Y = ∅。
项目集(对于短项目集)X 和 Y 称为规则的前件(左侧或 LHS)和后件(右侧或 RHS)。
为了说明这些概念,我们使用超市领域的一个小例子。项目集是 I = {牛奶、面包、黄油、啤酒},包含这些项目的小型数据库如下表所示。
| 交易ID | 项目 |
|---|---|
| 1 | 牛奶、面包 |
| 2 | 牛油面包 |
| 3 | 啤酒 |
| 4 | 牛奶、面包、黄油 |
| 5 | 牛油面包 |
超市的规则示例可以是{牛奶,面包} ⇒ {黄油},这意味着如果购买了牛奶和面包,顾客也会购买黄油。为了从所有可能规则的集合中选择感兴趣的规则,可以使用对重要性和兴趣的各种度量的约束。最著名的限制是支持度和置信度的最低阈值。
项目集X的支持度supp(X)被定义为包含该项目集的数据集中的事务的比例。在表 1 的示例数据库中,项目集 {牛奶,面包} 的支持率为 2/5 = 0.4,因为它出现在所有事务的 40% 中(5 个事务中有 2 个)。寻找频繁项集可以被视为无监督学习问题的简化。
规则的置信度定义为conf(X⇒Y)=supp(X∪Y)/supp(X)。例如,规则{牛奶,面包}⇒{黄油}在表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"))
为了使用先验算法生成规则,我们需要创建一个交易矩阵。以下代码展示了如何在 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}