在 apriori 函数中,我希望结果只包含 LHSHouseOwnerFlag=0
和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 问题中使用它来确保只有 Product 列在 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
像我指定的那样。从其他 stackoverflow 问题中,我看到我可以放入default="rhs"
apriori 函数,如下所示:
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 列中没有任何内容。所以它对它没有用inspect
,subset
因为它当然会返回null。我用不同的支持号码对其进行了多次测试,以试验产品是否会出现,但 7 条相同的规则保持不变。
所以我的问题是,如何同时指定 LHS(HouseOwnerFlag)和 RHS(产品)?我究竟做错了什么?
编辑:您可以通过从https://www.dropbox.com/s/tax5xalac5xgxtf/testdf.txt?dl=0下载此测试数据集来重现此问题,请
注意,我只从一个巨大的数据集中获取了前 20 行,所以不幸的是,此处的输出不会与我上面显示的示例具有相同的产品名称。但问题仍然是一样的。我希望能够仅获得HouseOwnerFlag=0
和/或HouseOwnerFlag=1
在 LHS 和Product
RHS 上的列。