ビッグデータ分析-アソシエーションルール
してみましょう私は、I = 1、私は、2、...、私は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のデータベースの例では、アイテムセット{milk、bread}は、すべてのトランザクションの40%(5トランザクションのうち2トランザクション)で発生するため、2/5 = 0.4のサポートがあります。頻繁なアイテムセットを見つけることは、教師なし学習の問題を単純化したものと見なすことができます。
ルールの信頼度は、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 algorithm 見つけることができます。
# 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}