2016-08-05 4 views
4

を冗長ルールを削除するには、我々は3つのルールを持っていると仮定:(ルール[1]ルール[2]内のすべての項目が含まれているため)アソシエーションルール - (arules)

[1] {A,B,D} -> {C} 

[2] {A,B} -> {C} 

[3] Whatever it is 

ルール[2]ルール[1]のサブセットであるので、ルール[1]が除去されなければならない(規則[1]も特異的であり、その情報は、ルール[2]に含まれているため)

Iは、インターネットを介して検索し、誰もが冗長ルールを削除するために、これらのコードを使用している:

subset.matrix <- is.subset(rules.sorted, rules.sorted) 
subset.matrix[lower.tri(subset.matrix, diag=T)] <- NA 
redundant <- colSums(subset.matrix, na.rm=T) >= 1 
which(redundant) 
rules.pruned <- rules.sorted[!redundant] 

コードの仕組みを理解できません。

コードの2行目の後、subset.matrixになるだろう:ルール[2]ルール[1]のサブセットは、対応するセルであるので、下三角で

 [,1] [,2] [,3] 
[1,] NA 1 0 
[2,] NA NA 0 
[3,] NA NA NA 

細胞をNAとなるように設定されていますだから私は2つの質問があります:

  1. なぜ私たちは下の三角形をNAとして設定する必要がありますか?そうであれば、ルール[2]がルール[3]のサブセットであるかどうかをどのように確認できますか? 、私たちの場合

  2. (セルがNAとして設定されている)[1]を排除するものでなければならないルールが、これらのコードではなく、ルール[1]のルール[2]を排除します。任意の助けが理解されるであろう

(カラム2の最初のセルが1であり、コードの行3によれば、列2> = 1の列和は、従って冗長なものとして扱われるため)! !

+0

誰も助けることができますか? – BigData

答えて

7

あなたのコードを動作させるには、関心度(自信度または持ち上げ)が必要で、rules.sortedは自信を持って昇降する必要があります。とにかく、is.subset()はサイズn^2の行列を作成するので、コードはひどく非効率です(nはルールの数です)。また、ルールのis.subsetはルールのrhsとlhsをマージしますが、これは正しくありません。実装の詳細についてはあまり心配しないでください。

これを行うより効率的な方法は、パッケージarules(バージョン1.4-2で利用可能)の関数is.redundant()として実装されています。 この説明はマニュアルページから来ている:

ルールが同等以上の 自信を持って、より一般的なルールが存在する場合は冗長です。すなわち、より一般的な規則よりも同等かそれほど予測的でない場合には、より具体的な規則は冗長であり、 である。同一のRHSを持つが、1つ以上の項目がLHSから削除された の場合は、ルール がより一般的です。正式には、あるX 'サブセットXに対してconf 012(X'→Y)> conf(X→Y)の場合、X→Yのルールは冗長である。

これは、 Bayardo et al。によって定義されているように、マイナスまたはゼロの改善と同等です。 (2000)。この実装では、信頼性以外の措置、例えば がある。リフトの改善も同様に使用することができる。

? is.redundantの例を参照してください。

+0

私はそのような機能があるのか​​知らなかった。あなたの有益な情報をありがとう。 – BigData

+0

A - > BとB - > Aのようなルールがあれば、どうすればそれらを削除できますか?それらの1つは重複しているので。 "is.redundant"はそうすることができないようです。 – BigData

+0

削除したいものと削除するものをどのように知っていますか?彼らはどちらも同じサポートと持ち上げを持っています。私はあなたが規則でgenerateItemsets()を呼び出して、duplicated()を使ってまったく同じアイテムを含むルールを見つけることができると思います。 –

1

arulesパッケージと冗長なルールを削除...

実行アプリオリアルゴリズム:

rules <- apriori(transDat, parameter = list(supp = 0.01, conf = 0.5, target = "rules", maxlen = 3)) 

削除冗長:

rules <- rules[!is.redundant(rules)] 

が点検:

arules::inspect(rules) 

は、データフレームを作成します。 :

df = data.frame(
lhs = labels(lhs(rules)), 
rhs = labels(rhs(rules)), 
[email protected]) 
関連する問題