6

apriori 関数内で、LHSHouseOwnerFlag=0とにこれら 2 つの変数のみが結果に含まれるようにしHouseOwnerFlag=1ます。RHS には、列の属性のみを含める必要がありますProduct。例えば:

#   lhs                   rhs                                          support confidence     lift
# 1 {HouseOwnerFlag=0}    => {Product=SV 16xDVD M360 Black}            0.2500000  0.2500000 1.000000
# 2 {HouseOwnerFlag=1}    => {Product=Adventure Works 26" 720p}        0.2500000  0.2500000 1.000000
# 3 {HouseOwnerFlag=0}    => {Product=Litware Wall Lamp E3015 Silver}  0.1666667  0.3333333 1.333333
# 4 {HouseOwnerFlag=1}    => {Product=Contoso Coffee Maker 5C E0900}   0.1666667  0.3333333 1.333333

答えの一部はこの質問で解決されます: R arules, mine only rules from specific column

だから今私は以下を使用します:
rules <- apriori(sales, parameter=list(support =0.01, confidence =0.8, minlen=2), appearance = list(lhs=c("HouseOwnerFlag=0", "HouseOwnerFlag=1")))

次に、他の SO の質問からこれを使用して、製品列のみが RHS にあることを確認します。
inspect( subset( rules, subset = rhs %pin% "Product=" ) )

結果は次のようになります。

#   lhs                                                                  rhs                                          support confidence     lift
# 1 {ProductKey=153, IncomeGroup=Moderate, BrandName=Adventure Works }    => {Product=SV 16xDVD M360 Black}            0.2500000  0.2500000 1.000000
# 2 {ProductKey=176, MaritalStatus=M, ProductCategoryName=TV and Video }  => {Product=Adventure Works 26" 720p}        0.2500000  0.2500000 1.000000
# 3 {BrandName=Southridge Video, NumberChildrenAtHome=0 }                 => {Product=Litware Wall Lamp E3015 Silver}  0.1666667  0.3333333 1.333333
# 4 {HouseOwnerFlag=1, BrandName=Southridge Video, ProductKey=170 }       => {Product=Contoso Coffee Maker 5C E0900}   0.1666667  0.3333333 1.333333

したがって、LHS には、HouseOwnerFlag私が指定しただけでなく、考えられるすべての列を含めることができるようです。default="rhs"他のスタックオーバーフローの質問から、次のようにアプリオリ関数を入れることができることがわかりました。
rules <- apriori(sales, parameter=list(support =0.001, confidence =0.5, minlen=2), appearance = list(lhs=c("HouseOwnerFlag=0", "HouseOwnerFlag=1"), default="rhs"))

次に、検査すると(サブセット部分なしで、 だけinspect(rules)、以前よりもはるかに少ないルール(7)がありますが、実際HouseOwnerFlagには LHS にのみ含まれています。

#   lhs                   rhs                           support     confidence lift
# 1 {HouseOwnerFlag=0}    => {MaritalStatus=S}          0.2500000  0.2500000   1.000000
# 2 {HouseOwnerFlag=1}    => {Gender=M}                 0.2500000  0.2500000   1.000000
# 3 {HouseOwnerFlag=0}    => {NumberChildrenAtHome=0}   0.1666667  0.3333333   1.333333
# 4 {HouseOwnerFlag=1}    => {Gender=M}   0.1666667     0.3333333  1.333333

ただし、RHS には、RHS の Product 列からは何もありません。もちろん、nullを返すので、それは役に立ちinspectません。subset製品が表示されるかどうかを実験するために、さまざまなサポート番号で何度かテストしましたが、7 つの同じルールは同じままです。

私の質問は、LHS (HouseOwnerFlag) と RHS (Product) の両方を指定するにはどうすればよいですか? 私は何を間違っていますか?

編集: https://www.dropbox.com/s/tax5xalac5xgxtf/testdf.txt?dl=0からこのテスト データセットをダウンロードすることで、この問題を再現できます。残念ながら、ここでの出力には、上に表示した例と同じ製品名はありません。しかし、問題は依然として同じままです。HouseOwnerFlag=0LHS のみおよび/またはRHSHouseOwnerFlag=1の列を取得できるようにしたいです。Product

4

3 に答える 3

13

lhs と rhs を同時に制約することはできないようです (私もデータを操作する前はそうしませんでした)。ただし、サブセットを使用できます。編集:私は間違っていました。lhs と rhs を一度に制約することもできます。別の解決策については以下を参照してください。場合によっては、より大きなセットを計算してから左辺で分割すると便利な場合があるため、解決策 1 のままにします。

解決策 1:

rules_sales <- apriori(sales, 
                   parameter=list(support =0.001, confidence =0.5, minlen=2, maxlen=2), 
                   appearance = list(lhs=c("HouseOwnerFlag=0", "HouseOwnerFlag=1"), 
                                     default="rhs"))

rules_subset <- subset(rules_sales, (rhs %in% paste0("Product=", unique(sales$Product))))
inspect(rules_subset)

与えます:

  lhs                   rhs                                                support confidence lift
1 {HouseOwnerFlag=0} => {Product=SV DVD Movies E100 Yellow}                   0.05        0.5   10
2 {HouseOwnerFlag=0} => {Product=Fabrikam Refrigerator 4.6CuFt E2800 Grey}    0.05        0.5    5
3 {HouseOwnerFlag=1} => {Product=Contoso SLR Camera M144 Gold}                0.10        0.5    5

ただし、サポートが低いことに注意する必要があります。

Warning in apriori(sales, parameter = list(support = 0.001, confidence = 0.5,  :
  You chose a very low absolute support count of 0. You might run out of memory! Increase minimum support.

解決策 2:

パラメータのデフォルトの定義にだまされました。lhs と rhs を同時に使用すると、それらの 1 つに割り当てられている各アイテムが lhs/rhs にのみ使用できることがわかります。パラメーター「デフォルト」は自動的に「両方」に設定され、lhs/rhs で使用されていない他のすべての項目は両方に使用できます (R パッケージで実装されている外観パラメーターの説明: http://www.inside-r. org/node/86290、元の C 実装のマニュアルを読むと、それが可能に違いないことに気付きました: http://www.borgelt.net/doc/apriori/apriori.html#appearin )。設定するdefault="none"必要があり、後でサブセットを使用せずに lhs と rhs を制約できます。

rules_sales <- apriori(sales, 
                       parameter=list(support =0.001, confidence =0.5, minlen=2, maxlen=2), 
                       appearance = list(lhs=c("HouseOwnerFlag=0", "HouseOwnerFlag=1"), 
                       rhs=paste0("Product=", unique(sales$Product)), default="none"))
于 2015-10-20T06:51:00.160 に答える
2

私はパーティーに非常に遅れています...しかし、私も今パッケージで遊んでいるので、誰かに役立つ場合に備えて私の考えを含めさせてください.

出力に含まれるルールは、サポートおよび信頼パラメーターに準拠するルールです。したがって、期待する形式のルールがない場合は、これらの制約を緩和してみてください: 支持度が低く、信頼度が低くなります。私が見つけた限り、lhs には 1 つの用語しか含めることができないため、この部分を表示したい用語 (製品) に制限して、ルールの生成を高速化することができます。特定のデータセットを試したことはありませんが、これはすべての場合に機能する一般的なアドバイスだと思います。

于 2015-04-15T00:28:37.427 に答える