如何为arules中的特定列获取LHS和RHS项目?

如何为arules中的特定列获取LHS和RHS项目?,r,apriori,arules,R,Apriori,Arules,在apriori函数中,我希望结果只包含LHSHouseOwnerFlag=0和HouseOwnerFlag=1中的这两个变量。RHS应仅包含列Product中的属性。例如: # lhs rhs support confidence lift # 1 {HouseOwnerFlag=0} => {Product=SV 16xDVD M360 Black}

在apriori函数中,我希望结果只包含LHS
HouseOwnerFlag=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
这个问题解决了部分问题:

因此,现在我使用以下命令:

规则我参加聚会迟到了。。。但由于我现在也在玩这个软件包,让我把我的想法包括进去,以防对某人有所帮助

输出中包含的规则是符合支持度和置信度参数的规则。因此,如果您没有任何与您期望的格式相关的规则,请尝试放松这些约束:较低的支持,较低的信心。 据我所知,lhs只能包含一个术语,因此您可以将此部分限制为希望显示的术语(产品),以加快规则生成。
我还没有尝试使用您的特定数据集,但我认为这是一个在所有情况下都适用的一般建议。

似乎无法同时约束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)
但是你应该小心你的低支持率:

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:

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告诉分配给其中一个的每个项目,它只能用于lhs/rhs。参数“default”自动设置为“both”,lhs/rhs中未使用的所有其他项都可以用于这两个参数(解释R包中实现的外观参数:,我意识到在阅读原始C实现的手册时,这必须是可能的:)。您必须设置
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"))

规则\u销售请尝试以下解决方案:

rules_subset <- subset(rules, (lhs %oin% c("HouseOwnerFlag=0", "HouseOwnerFlag=1")  & rhs %pin% c("Product=") ))

rules\u子集当您包含@MrFlick时,总是更容易提供帮助,好的,谢谢您的建议。如果人们想重现这个问题,我只做了一个小测试集。我添加了一个不同的解决方案,我刚刚意识到我对默认参数的理解是错误的:)谢谢你全面的回答!我有这个问题已经有一段时间了,我还没有重新创建,但它似乎是合乎逻辑的。
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"))
rules_subset <- subset(rules, (lhs %oin% c("HouseOwnerFlag=0", "HouseOwnerFlag=1")  & rhs %pin% c("Product=") ))