6

問題:

arulesパッケージのapriori関数は、入力トランザクションからアソシエーション ルールを推測し、各ルールのサポート信頼度リフトを報告します。アソシエーション ルールは、頻出アイテムセットから派生します。入力トランザクションで最も頻繁に使用される項目セットを取得したいと考えています。具体的には、特定の最小サポートですべてのアイテムセットを取得したいと考えています。アイテムセットのサポートは、アイテムセットを含むトランザクションの数とトランザクションの総数の比率です。

要件:

  1. アプリオリ関数の中間結果から最も頻繁に使用される項目セットを見つけることを強く希望します。つまり、最も頻繁に使用されるアイテムセットを計算するためだけにプログラムをゼロから作成するのは避けたいと思います。なぜなら、アプリオリ関数が既に中間ステップとしてそれを計算しているからです。それにもかかわらず、アプリオリ関数の中間結果にアクセスする合理的な方法が実際にない場合、私は他の解決策を受け入れます。
  2. このアプローチはapriori関数の結果の文字列表現に大きく依存するため、 apriori関数の結果に対して文字列操作を行いたくありません。繰り返しますが、より良い代替手段がないことが判明した場合、私はこのアプローチに頼るかもしれません.
  3. arulesパッケージitemFrequencyが提供する機能を認識しています。残念ながら、この関数はアイテムセットを 1 つのアイテムで報告するだけです。最小限のサポートで任意の長さのすべてのアイテムセットに興味があります。
  4. 出力を数値的にサポートでソートしてから、辞書式にアイテムセットでソートしたいと思います。

入力例:

a,b
a,b,c

プログラム:

# The following is how I'm using apriori to infer the association rules.
library(package = "arules")
transactions = read.transactions(file = file("stdin"), format = "basket", sep = ",")
rules = apriori(transactions, parameter = list(minlen=1, sup = 0.001, conf = 0.001))
WRITE(rules, file = "", sep = ",", quote = TRUE, col.names = NA)

現在の出力:

"","rules","support","confidence","lift"
"1","{} => {c}",0.5,0.5,1
"2","{} => {b}",1,1,1
"3","{} => {a}",1,1,1
"4","{c} => {b}",0.5,1,1
"5","{b} => {c}",0.5,0.5,1
"6","{c} => {a}",0.5,1,1
"7","{a} => {c}",0.5,0.5,1
"8","{b} => {a}",1,1,1
"9","{a} => {b}",1,1,1
"10","{b,c} => {a}",0.5,1,1
"11","{a,c} => {b}",0.5,1,1
"12","{a,b} => {c}",0.5,0.5,1

望ましい出力:

"itemset","support"
"{a}",1
"{a,b}",1
"{b}",1
"{a,b,c}",0.5
"{a,c}",0.5
"{b,c}",0.5
"{c}",0.5
4

1 に答える 1

8

arules パッケージのリファレンスマニュアルgeneratingItemsetsで関数を見つけました。

library(package = "arules")
transactions = read.transactions(file = file("stdin"), format = "basket", sep = ",")
rules = apriori(transactions, parameter = list(minlen=1, sup = 0.001, conf = 0.001))
itemsets <- unique(generatingItemsets(rules))
itemsets.df <- as(itemsets, "data.frame")
frequentItemsets <- itemsets.df[with(itemsets.df, order(-support,items)),]
names(frequentItemsets)[1] <- "itemset"
write.table(frequentItemsets, file = "", sep = ",", row.names = FALSE)
于 2012-01-14T21:17:32.837 に答える